这是数据:
df = pd.DataFrame({
'date':[1,1,2,2,2,3,3,3,4,5],
'request':[2,2,2,3,3,2,3,3,3,3],
'users':[1,3,7,1,7,3,4,9,7,9],
'count':[1,1,2,3,1,3,1,2,1,1]
})
df
count date request users
0 1 1 2 1
1 1 1 2 3
2 2 2 2 7
3 3 2 3 1
4 1 2 3 7
5 3 3 2 3
6 1 3 3 4
7 2 3 3 9
8 1 4 3 7
9 1 5 3 9
这个想法是分组依据count
and date
,并将每隔一列转换为分组值列表。我以为这就像打电话一样简单dfgp.agg
但事实并非如此。
这就是我想做的:
date request count users
0 1 2 [1, 1] [1, 3]
1 2 2 [2] [7]
2 2 3 [3, 1] [1, 7]
3 3 2 [3] [3]
4 3 3 [1, 2] [4, 9]
5 4 3 [1] [7]
6 5 3 [1] [9]
我就是这样做的:
grouped_df = df.groupby(['date', 'request'])
df_new = pd.DataFrame({ 'count' : grouped_df['count'].apply(list), 'users' : grouped_df['users'].apply(list) }).reset_index()
它有效,但我相信必须有一种更好的方法......一个可以工作的方法all分组对象中的列。例如,我应该只分组date
并且解决方案应该有效。我的解决方案将依赖于对列进行硬编码,但我不喜欢这样做,因此在这种情况下它将失败。
这是一直困扰我的事情。这应该是一个明显的解决方案,但我找不到它。有没有更好的办法?
Calling all my Pandas MVPs...