[英]How to aggregate values from multiple columns from a Pandas DataFrameGroupBy object?
[英]Create columns of lists from DataFrameGroupBy object
我想在多個列表中創建一個groupby數據框和組行:我有以下數據框:
list_date = [1,1,2,2,2,3,3,3,4,5]
list_request = [2,2,2,3,3,2,3,3,3,3]
list_users = [1,3,7,1,7,3,4,9,7,9]
list_count = [1,1,2,3,1,3,1,2,1,1]
df = pd.DataFrame({'date':list_date,'request':list_request,'users':list_users, 'count':list_count})
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
並且我想得到以下結果(按['date','request']分組):
count date request users
0 [1, 1] 1 2 [1, 3]
1 [2] 2 2 [7]
2 [3, 1] 2 3 [1, 7]
3 [3] 3 2 [3]
4 [1, 2] 3 3 [4, 9]
5 [1] 4 3 [7]
6 [1] 5 3 [9]
如果我在這里使用解決方案: 在pandas groupby中對列表中的行進行分組,我可以創建1個列表,但如何同時創建2個列表呢? 就像是 :
df = df.groupby(['date','request'])['users','count'].apply(list).reset_index()
我需要高效的東西,因為實際上我有數百萬行...
謝謝!
您可以應用pd.Series
,然后重命名您的列:
In [299]: df.groupby(['date', 'request']).apply(lambda x: pd.Series((x['count'].tolist(), x['users'].tolist()))).reset_index().rename(columns={0 : 'count', 1 : 'users'})
Out[299]:
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]
另一個解決方案是使用df.apply
應用列表:
In [364]: grouped_df = df.groupby(['date', 'request'])
In [365]: pd.DataFrame({ 'count' : grouped_df['count'].apply(list), 'users' : grouped_df['users'].apply(list) }).reset_index() #, columns=['count', 'users'])
Out[365]:
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]
可能在這里看到更好的解決方案(我問了一個問題): 將DataFrameGroupBy對象中的每個分組列轉換為一個列表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.