首页 > 解决方案 > pandas groupby 并创建新列

问题描述

我的数据框看起来像这样:

user_id article_id  set_tags
1            31       true
1            32       false
1            35       false
2            11       false
2            11       true
3            56       true

我想得到这样的结果:

user_id total_articles  set_tags_true   set_tags_false
   1      3                    1               2
   2      2                    1               1
   3      1                    1               0

我是新手,我该怎么做?我尝试使用 groupby.count(),但它似乎不正确。

标签: pythonpandasgroup-bycountpandas-groupby

解决方案


import pandas as pd
df = pd.DataFrame(
    data = [[1,31,True],[1,32,False],[1,35,False],[2,11,False],[2,11,True],[3,56,True]],
    columns=['user_id','article_id','set_tags']
)
df
   user_id  article_id  set_tags
0        1          31      True
1        1          32     False
2        1          35     False
3        2          11     False
4        2          11      True
5        3          56      True

output_df = df.groupby('user_id').agg({'article_id':'nunique', 'set_tags':['sum', (lambda x:sum(~x))]})
output_df.columns = ['total_articles','set_tags_True','set_tags_False']
output_df
         total_articles  set_tags_True  set_tags_False
user_id                                               
1                     3              1               2
2                     1              1               1
3                     1              1               0

如果您希望 user_id 2 的 total_articles 条目为 2 而不是 1,只需将 nunique 替换为 count。


推荐阅读