質問編集履歴
4
求めたいデータを追記しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
当該処理の実現方法がわかる方いましたら、ご教示いただきたく宜しくお願い致します。
|
18
18
|
|
19
|
-
|
19
|
+
↓元データ
|
20
20
|
|
21
21
|
|OUTPUT_DAY|KOJI_NO|YOTEI_YMD|
|
22
22
|
|
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|20191106|A12345|20190827|
|
32
32
|
|
33
|
-
|20191107|A12345|2019082
|
33
|
+
|20191107|A12345|20190828|
|
34
34
|
|
35
35
|
|20191108|A12345|20190824|
|
36
36
|
|
@@ -45,6 +45,40 @@
|
|
45
45
|
|20191107|B12345|20190827|
|
46
46
|
|
47
47
|
|20191108|B12345|20190827|
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
↓求めたいデータ(days_diffとmonths_diffをconcat(axis=1)で結合)
|
54
|
+
|
55
|
+
|OUTPUT_DAY|KOJI_NO|YOTEI_YMD|days_diff|months_diff
|
56
|
+
|
57
|
+
|---|---|---|---|---|
|
58
|
+
|
59
|
+
|20191101|A12345|20190708|Nan|Nan
|
60
|
+
|
61
|
+
|20191102|A12345|20190827|50|1
|
62
|
+
|
63
|
+
|20191103|A12345|20190827|0|0
|
64
|
+
|
65
|
+
|20191106|A12345|20190827|0|0
|
66
|
+
|
67
|
+
|20191107|A12345|20190828|1|0
|
68
|
+
|
69
|
+
|20191108|A12345|20190824|-4|0
|
70
|
+
|
71
|
+
|20191101|B12345|20190704|Nan|Nan
|
72
|
+
|
73
|
+
|20191102|B12345|20190708|4|0
|
74
|
+
|
75
|
+
|20191103|B12345|20190827|0|0
|
76
|
+
|
77
|
+
|20191106|B12345|20190827|0|0
|
78
|
+
|
79
|
+
|20191107|B12345|20190827|0|0
|
80
|
+
|
81
|
+
|20191108|B12345|20190827|0|0
|
48
82
|
|
49
83
|
|
50
84
|
|
3
test
CHANGED
File without changes
|
test
CHANGED
@@ -84,7 +84,7 @@
|
|
84
84
|
|
85
85
|
|
86
86
|
|
87
|
-
months_diff = df
|
87
|
+
months_diff = df.groupby(['KOJI_NO'])['YOTEI_YMD'].rolling(2).apply(func_diff_month)
|
88
88
|
|
89
89
|
```
|
90
90
|
|
2
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -70,6 +70,8 @@
|
|
70
70
|
|
71
71
|
|
72
72
|
|
73
|
+
df['YOTEI_YMD'] = pd.to_datetime(df['YOTEI_YMD'], format='%Y%m%d')
|
74
|
+
|
73
75
|
days_diff = df.groupby(['KOJI_NO'])['YOTEI_YMD'].diff()
|
74
76
|
|
75
77
|
|
1
足りない点を加筆
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
pandas.DataFrameでの月数差分を求めたい。rolling() relativedelta()
|
1
|
+
pandas.DataFrameで日付カラムの月数差分を求めたい。rolling() relativedelta()
|
test
CHANGED
@@ -8,7 +8,15 @@
|
|
8
8
|
|
9
9
|
### 発生している問題・エラーメッセージ
|
10
10
|
|
11
|
-
以下のようなデータが有り、KOJI_NOで
|
11
|
+
以下のようなデータが有り、KOJI_NOでgroupbyしてYOTEI_YMDの差分(変化)を求めようとしています。
|
12
|
+
|
13
|
+
YOTEI_YMDをpd.to_datetime()してからdiff()で日数差分は求められました。
|
14
|
+
|
15
|
+
rolling()とrelativedelta()を組み合わせた関数で月数差分を求めようとしたのですが上手くいきません。
|
16
|
+
|
17
|
+
当該処理の実現方法がわかる方いましたら、ご教示いただきたく宜しくお願い致します。
|
18
|
+
|
19
|
+
|
12
20
|
|
13
21
|
|OUTPUT_DAY|KOJI_NO|YOTEI_YMD|
|
14
22
|
|
@@ -52,11 +60,29 @@
|
|
52
60
|
|
53
61
|
### 該当のソースコード
|
54
62
|
|
55
|
-
|
63
|
+
months_diffを求めるコードでエラーとなってしまします。
|
56
64
|
|
57
65
|
```python
|
58
66
|
|
67
|
+
import pandas as pd
|
59
68
|
|
69
|
+
from dateutil import relativedelta as rdelta
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
days_diff = df.groupby(['KOJI_NO'])['YOTEI_YMD'].diff()
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
def func_diff_month(x):
|
78
|
+
|
79
|
+
m0, m1 = x[0], x[1]
|
80
|
+
|
81
|
+
return rdelta.relativedelta(m0, m1).months
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
months_diff = df_sort.groupby(['KOJI_NO'])['YOTEI_YMD'].rolling(2).apply(func_diff_month)
|
60
86
|
|
61
87
|
```
|
62
88
|
|
@@ -66,12 +92,4 @@
|
|
66
92
|
|
67
93
|
|
68
94
|
|
69
|
-
ここに問題に対して試したことを記載してください。
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
95
|
+
rolling(2)の窓サイズの要素を、relativedelta().monthsで月数差分を取得しようとしました。
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
ここにより詳細な情報を記載してください。
|