pandas groupby 并创建新列

Posted

技术标签:

【中文标题】pandas groupby 并创建新列【英文标题】:pandas groupby and create new columns 【发布时间】:2021-10-09 14:05:48 【问题描述】:

我的数据框如下所示:

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(),但它似乎不正确。

【问题讨论】:

user_id 2 的 total_articles 列应该是 2 还是 1? @PhilipEgger 我的错,应该是 2 【参考方案1】:
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。

【讨论】:

哎呀我这里有个问题,你能解释一下为什么会这样吗?如果我像这样完成数据帧:`df = pd.DataFrame(data = [['1','10001963',True],['2','40014',True],['2','40017', False],['1','40057',True]], columns=['user_id','article_id','set_tags'] ) ` 作为 set_tags_False 的结果,我得到:False True

以上是关于pandas groupby 并创建新列的主要内容,如果未能解决你的问题,请参考以下文章

Groupby并通过在Pandas中随机分配多个字符串来创建一个新列

如何在单个级别上添加新列时使用 pandas group-by?

如何从 pandas groupby().sum() 的输出创建一个新列?

python – Pandas使用groupby中的count来创建新列

将 groupby 平均统计数据映射为 pandas 中的新列

根据 pandas 数据框中的条件将 value_counts 与 groupby 函数一起使用并插入新列