回答編集履歴
3
f
answer
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
|
21
21
|
```python
|
22
|
+
import numpy as np
|
22
23
|
import pandas as pd
|
23
24
|
|
24
25
|
df = pd.DataFrame(
|
2
x
answer
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
この行の場合
|
17
17
|
1. 9月 - 3ヶ月 = 6月 を計算する。
|
18
|
-
2.
|
18
|
+
2. ID1で6月の行の売上を抽出する。抽出した結果が空の場合、そのようなデータはないということなので、np.nan を返す。
|
19
19
|
|
20
20
|
|
21
21
|
```python
|
@@ -47,10 +47,10 @@
|
|
47
47
|
# nヶ月前を表す文字列を作成する。(例: 9月だったら6月)
|
48
48
|
n_month_ago = str(int(month[:-1]) - i) + "月"
|
49
49
|
|
50
|
-
# 「ID が同じ」かつ「月が n_month_ago」と一致する行を取得する。
|
50
|
+
# 「ID が同じ」かつ「月が n_month_ago」と一致する行の列「売上」の値を取得する。
|
51
51
|
sale_n_month_ago = df.loc[(df["ID"] == id_) & (df["月"] == n_month_ago), "売上"]
|
52
52
|
|
53
|
-
# もしそのような
|
53
|
+
# もしそのような値が存在しない場合は sale_n_month_ago は空なので、NaN とする。
|
54
54
|
# 存在する場合はスカラーにする。
|
55
55
|
sale_n_month_ago = np.nan if sale_n_month_ago.empty else sale_n_month_ago.values[0]
|
56
56
|
|
1
d
answer
CHANGED
@@ -57,22 +57,10 @@
|
|
57
57
|
return sale_n_month_ago
|
58
58
|
|
59
59
|
|
60
|
-
# datetime64 型に変換する。
|
61
|
-
dt = pd.to_datetime(df["月"], format="%m月")
|
62
|
-
|
63
60
|
for i in range(1, 4):
|
64
61
|
df[f"{i}ヶ月前売り上げ"] = df.apply(get_n_month_ago, axis=1, args=(i,))
|
65
62
|
|
66
|
-
print(df)
|
67
|
-
# 月 ID 売上 地域 1ヶ月前売り上げ 2ヶ月前売り上げ 3ヶ月前売り上げ
|
68
|
-
|
63
|
+
df.to_csv("test2.csv", index=False)
|
69
|
-
# 1 8月 1 110 東京 120.0 130.0 NaN
|
70
|
-
# 2 7月 1 120 東京 130.0 NaN NaN
|
71
|
-
# 3 6月 1 130 東京 NaN NaN NaN
|
72
|
-
# 4 9月 2 90 千葉 80.0 70.0 60.0
|
73
|
-
# 5 8月 2 80 千葉 70.0 60.0 NaN
|
74
|
-
# 6 7月 2 70 千葉 60.0 NaN NaN
|
75
|
-
# 7 6月 2 60 千葉 NaN NaN NaN
|
76
64
|
```
|
77
65
|
|
78
66
|
作成された CSV
|