回答編集履歴
1
処理方法を追加
test
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
**【方法1】**
|
2
|
+
|
3
|
+
|
4
|
+
|
1
5
|
[DataFrame.swaplevel()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.swaplevel.html)でマルチインデックスの順番を変更し、[DataFrame.sort_index()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_index.html)で行を適切な順番に並び替えます。
|
2
6
|
|
3
7
|
|
@@ -49,3 +53,69 @@
|
|
49
53
|
| | 山田 | 5500 |
|
50
54
|
|
51
55
|
| | 田中 | 1000 |
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
---
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
追記:
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
**【方法2】**
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
[pd.Grouper()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Grouper.html)を用いると、インデックスと通常の列の組み合わせでグルーピング処理を行うことができます。
|
72
|
+
|
73
|
+
⇒[pandas公式の解説](https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html#grouping-dataframe-with-index-levels-and-columns)
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
```python
|
78
|
+
|
79
|
+
import pandas as pd
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
# 質問文のコード
|
84
|
+
|
85
|
+
data = {'日付': ['2020/01/01','2020/01/01','2020/01/03','2020/01/03','2020/01/03','2020/02/06','2020/02/06','2020/02/08','2020/02/10','2020/02/10'],
|
86
|
+
|
87
|
+
'名前': ['山田' , '田中' , '山田' , '田中' , '佐藤' , '山田' , '田中' , '山田' , '山田' , '佐藤' ],
|
88
|
+
|
89
|
+
'金額': [1000,500,300,2000,1500,500,1000,3000,2000,4000]}
|
90
|
+
|
91
|
+
df = pd.DataFrame(data)
|
92
|
+
|
93
|
+
df['日付'] = pd.to_datetime(df['日付'],format='%Y/%m/%d')
|
94
|
+
|
95
|
+
df = df.set_index('日付')
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
# 処理ここから
|
100
|
+
|
101
|
+
df.groupby([pd.Grouper(freq='M'), '名前']).sum()
|
102
|
+
|
103
|
+
```
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
| 日付 | 名前 | 金額 |
|
108
|
+
|
109
|
+
|:-----------|:-------|-------:|
|
110
|
+
|
111
|
+
| 2020-01-31 | 佐藤 | 1500 |
|
112
|
+
|
113
|
+
| | 山田 | 1300 |
|
114
|
+
|
115
|
+
| | 田中 | 2500 |
|
116
|
+
|
117
|
+
| 2020-02-29 | 佐藤 | 4000 |
|
118
|
+
|
119
|
+
| | 山田 | 5500 |
|
120
|
+
|
121
|
+
| | 田中 | 1000 |
|