gpt4 book ai didi

python - 根据分组值将列添加到 DataFrame

转载 作者:行者123 更新时间:2023-12-04 01:18:08 25 4
gpt4 key购买 nike

我有这个数据框:

df = pd.DataFrame({'site': ['a', 'a', 'a', 'b', 'b', 'b', 'a', 'a', 'a'],
'day': [1, 1, 1, 1, 1, 1, 2, 2, 2],
'hour': [1, 2, 3, 1, 2, 3, 1, 2, 3],
'clicks': [100, 200, 50, 0, 20, 30, 10, 0, 20]})
# site day hour clicks
# 0 a 1 1 100
# 1 a 1 2 200
# 2 a 1 3 50
# 3 b 1 1 0
# 4 b 1 2 20
# 5 b 1 3 30
# 6 a 2 1 10
# 7 a 2 2 0
# 8 a 2 3 20

我想要实现的目标:按“站点”和“天”对这些数据进行分组,并添加一个字段 (has_hour_1_clicks),指示该站点/天的“小时”==1 的点击值是否大于 0 .我知道对于分组我基本上需要这个:

df.groupby(['site', 'day'])

但我找不到使用 transform()、filter() 或 aggr() 获得我想要的东西的方法。

所以我想从中得到的 DataFrame 看起来像这样:

#   site  day  hour  clicks  has_hour_1_clicks
# 0 a 1 1 100 True
# 1 a 1 2 200 True
# 2 a 1 3 50 True
# 3 b 1 1 0 False
# 4 b 1 2 20 False
# 5 b 1 3 30 False
# 6 a 2 1 10 True
# 7 a 2 2 0 True
# 8 a 2 3 20 True

最佳答案

这看起来像是 GroupBy.transform 的工作:

(df.eval('has_clicks = hour == 1 and clicks > 0')
.groupby(['site', 'day'])['has_clicks']
.transform('any'))

0 True
1 True
2 True
3 False
4 False
5 False
6 True
7 True
8 True
Name: has_clicks, dtype: bool

工作原理

首先,找到符合您条件的行:

# eval statement is doing exactly this, but more succinctly
df.assign(has_clicks=(df['hour'] == 1) & (df['clicks'] > 0))

site day hour clicks has_clicks
0 a 1 1 100 True
1 a 1 2 200 False
2 a 1 3 50 False
3 b 1 1 0 False
4 b 1 2 20 False
5 b 1 3 30 False
6 a 2 1 10 True
7 a 2 2 0 False
8 a 2 3 20 False

接下来,获取“has_clicks”列,如果该组中的任何行为真,则将该组中的所有行转换为“True”。这就是 transform('any') 正在做的事情:

_.groupby(['site', 'day'])['has_clicks'].transform('any')

0 True
1 True
2 True
3 False
4 False
5 False
6 True
7 True
8 True
Name: has_clicks, dtype: bool

关于python - 根据分组值将列添加到 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62979068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com