質問編集履歴
4
求めたいデータを追記しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,14 +7,14 @@
|
|
7
7
|
YOTEI_YMDをpd.to_datetime()してからdiff()で日数差分は求められました。
|
8
8
|
rolling()とrelativedelta()を組み合わせた関数で月数差分を求めようとしたのですが上手くいきません。
|
9
9
|
当該処理の実現方法がわかる方いましたら、ご教示いただきたく宜しくお願い致します。
|
10
|
-
|
10
|
+
↓元データ
|
11
11
|
|OUTPUT_DAY|KOJI_NO|YOTEI_YMD|
|
12
12
|
|---|---|---|
|
13
13
|
|20191101|A12345|20190708|
|
14
14
|
|20191102|A12345|20190827|
|
15
15
|
|20191103|A12345|20190827|
|
16
16
|
|20191106|A12345|20190827|
|
17
|
-
|20191107|A12345|
|
17
|
+
|20191107|A12345|20190828|
|
18
18
|
|20191108|A12345|20190824|
|
19
19
|
|20191101|B12345|20190704|
|
20
20
|
|20191102|B12345|20190708|
|
@@ -23,6 +23,23 @@
|
|
23
23
|
|20191107|B12345|20190827|
|
24
24
|
|20191108|B12345|20190827|
|
25
25
|
|
26
|
+
|
27
|
+
↓求めたいデータ(days_diffとmonths_diffをconcat(axis=1)で結合)
|
28
|
+
|OUTPUT_DAY|KOJI_NO|YOTEI_YMD|days_diff|months_diff
|
29
|
+
|---|---|---|---|---|
|
30
|
+
|20191101|A12345|20190708|Nan|Nan
|
31
|
+
|20191102|A12345|20190827|50|1
|
32
|
+
|20191103|A12345|20190827|0|0
|
33
|
+
|20191106|A12345|20190827|0|0
|
34
|
+
|20191107|A12345|20190828|1|0
|
35
|
+
|20191108|A12345|20190824|-4|0
|
36
|
+
|20191101|B12345|20190704|Nan|Nan
|
37
|
+
|20191102|B12345|20190708|4|0
|
38
|
+
|20191103|B12345|20190827|0|0
|
39
|
+
|20191106|B12345|20190827|0|0
|
40
|
+
|20191107|B12345|20190827|0|0
|
41
|
+
|20191108|B12345|20190827|0|0
|
42
|
+
|
26
43
|
```
|
27
44
|
|
28
45
|
DataError: No numeric types to aggregate
|
3
title
CHANGED
File without changes
|
body
CHANGED
@@ -41,7 +41,7 @@
|
|
41
41
|
m0, m1 = x[0], x[1]
|
42
42
|
return rdelta.relativedelta(m0, m1).months
|
43
43
|
|
44
|
-
months_diff =
|
44
|
+
months_diff = df.groupby(['KOJI_NO'])['YOTEI_YMD'].rolling(2).apply(func_diff_month)
|
45
45
|
```
|
46
46
|
|
47
47
|
### 試したこと
|
2
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -34,6 +34,7 @@
|
|
34
34
|
import pandas as pd
|
35
35
|
from dateutil import relativedelta as rdelta
|
36
36
|
|
37
|
+
df['YOTEI_YMD'] = pd.to_datetime(df['YOTEI_YMD'], format='%Y%m%d')
|
37
38
|
days_diff = df.groupby(['KOJI_NO'])['YOTEI_YMD'].diff()
|
38
39
|
|
39
40
|
def func_diff_month(x):
|
1
足りない点を加筆
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
pandas.DataFrameでの月数差分を求めたい。rolling() relativedelta()
|
1
|
+
pandas.DataFrameで日付カラムの月数差分を求めたい。rolling() relativedelta()
|
body
CHANGED
@@ -3,7 +3,11 @@
|
|
3
3
|
- 日数差分はdiff()で求められたが、差分が月を跨いでいるかを判定したい
|
4
4
|
|
5
5
|
### 発生している問題・エラーメッセージ
|
6
|
-
以下のようなデータが有り、KOJI_NOで
|
6
|
+
以下のようなデータが有り、KOJI_NOでgroupbyしてYOTEI_YMDの差分(変化)を求めようとしています。
|
7
|
+
YOTEI_YMDをpd.to_datetime()してからdiff()で日数差分は求められました。
|
8
|
+
rolling()とrelativedelta()を組み合わせた関数で月数差分を求めようとしたのですが上手くいきません。
|
9
|
+
当該処理の実現方法がわかる方いましたら、ご教示いただきたく宜しくお願い致します。
|
10
|
+
|
7
11
|
|OUTPUT_DAY|KOJI_NO|YOTEI_YMD|
|
8
12
|
|---|---|---|
|
9
13
|
|20191101|A12345|20190708|
|
@@ -25,15 +29,20 @@
|
|
25
29
|
```
|
26
30
|
|
27
31
|
### 該当のソースコード
|
28
|
-
|
32
|
+
months_diffを求めるコードでエラーとなってしまします。
|
29
33
|
```python
|
34
|
+
import pandas as pd
|
35
|
+
from dateutil import relativedelta as rdelta
|
30
36
|
|
37
|
+
days_diff = df.groupby(['KOJI_NO'])['YOTEI_YMD'].diff()
|
38
|
+
|
39
|
+
def func_diff_month(x):
|
40
|
+
m0, m1 = x[0], x[1]
|
41
|
+
return rdelta.relativedelta(m0, m1).months
|
42
|
+
|
43
|
+
months_diff = df_sort.groupby(['KOJI_NO'])['YOTEI_YMD'].rolling(2).apply(func_diff_month)
|
31
44
|
```
|
32
45
|
|
33
46
|
### 試したこと
|
34
47
|
|
35
|
-
ここに問題に対して試したことを記載してください。
|
36
|
-
|
37
|
-
|
48
|
+
rolling(2)の窓サイズの要素を、relativedelta().monthsで月数差分を取得しようとしました。
|
38
|
-
|
39
|
-
ここにより詳細な情報を記載してください。
|