后台:我有以下数据框:
import pandas as pd
d = {'day': ["t", "m", "m", "w", "t", "m","w"],
'month': ["01", "01", "01", "01", "02","02","02"],
'count': [1, 1, 1, 1,1,1,1]}
df = pd.DataFrame(data=d)
我按day
和month
分组:
df.groupby(by=['day','month']).count()
输出:
day month count
m 01 2
02 1
t 01 1
02 1
w 01 1
02 1
从这里开始,我想组织数据以获得以下输出:
期望输出:
day month count
m 01 2
t 01 1
w 01 1
m 02 1
t 02 1
w 02 1
我尝试了df.sort_values('month')
和df.sort_values('day')
,但它并没有给我提供我想要的东西
问题:我需要添加哪些代码才能获得所需的输出?
答案 0 :(得分:3)
你走了。它恰好只能使当天订购正确,但如果你有更多的日子,你可能想要将它们转换为实际的0-6天。
df.groupby(by=['day','month'], as_index=False).count().sort_values(by=['month', 'day'])
day month count
0 m 01 2
2 t 01 1
4 w 01 1
1 m 02 1
3 t 02 1
5 w 02 1
答案 1 :(得分:2)
将sort_index
与level
参数一起使用:
df.groupby(by=['day','month']).count().sort_index(level=1)
输出:
count
day month
m 01 2
t 01 1
w 01 1
m 02 1
t 02 1
w 02 1
和reset_index如果你愿意的话。
df.groupby(by=['day','month']).count().sort_index(level=1).reset_index()
day month count
0 m 01 2
1 t 01 1
2 w 01 1
3 m 02 1
4 t 02 1
5 w 02 1
答案 2 :(得分:2)
groupby
会自动对索引进行排序。相反,切换您要分组的顺序,然后交换级别
df.groupby(by=['month', 'day']).count().swaplevel(0, 1)
count
day month
m 01 2
t 01 1
w 01 1
m 02 1
t 02 1
w 02 1
答案 3 :(得分:1)
import pandas as pd
d = {'day': ["t", "m", "m", "w", "t", "m","w"],
'month': ["01", "01", "01", "01", "02","02","02"],
'count': [1, 1, 1, 1,1,1,1]}
df = pd.DataFrame(data=d)
df.groupby(['day','month']).count().reset_index()
输出(您现在可以应用sort()
day month count
0 m 01 2
1 m 02 1
2 t 01 1
3 t 02 1
4 w 01 1
5 w 02 1