gpt4 book ai didi

python-3.x - 根据 groupby 和 TimeGrouper 之后的列条件从 pandas 数据框中获取行

转载 作者:行者123 更新时间:2023-12-01 02:35:44 25 4
gpt4 key购买 nike

我有一个带有时间戳的 pandas 数据框,我想获取一般情况下每天“y”的数量,以及按组每天“y”的数量。举个例子:

df = pd.DataFrame({
'action': ['n','n', 'y', 'n', 'n', 'n', 'y', 'n', 'n', 'y', 'y'],
'timestamp': pd.to_datetime(
['2016-03-01 10:38:42','2016-03-01 10:38:42', '2016-03-01 10:38:42',
'2016-03-01 10:38:42', '2016-03-01 10:38:42',
'2016-03-02 10:38:42', '2016-03-02 10:38:42',
'2016-03-03 10:38:42', '2016-03-03 10:38:42',
'2016-03-03 10:38:42', '2016-03-03 10:38:42']),
'group': ['A','A','A', 'B', 'B', 'A', 'A', 'B', 'B','A', 'A']
})

df.set_index(keys='timestamp', inplace = True)
df

这是数据框的样子: enter image description here到目前为止,我的方法是:

grouper = df.groupby([pd.TimeGrouper('D')])

我不知道该怎么做。我想要的是每天“y”的数量:

timestamp  |  count
2016-03-01 | 1
2016-03-02 | 1
2016-03-03 | 2

我还想获得每组每天“y”的数量。在这种情况下,A 应为 4,B 应为 0。任何帮助将不胜感激!

最佳答案

我首先按日期和列 group 进行分组。随后,我在几天内加入了第二个小组。

per_day_group = df.assign(
yes=df.action.eq('y').astype(np.uint8)
).groupby([pd.TimeGrouper('D'), 'group']).yes.sum()

print(per_day_group)

timestamp group
2016-03-01 A 1
B 0
2016-03-02 A 1
2016-03-03 A 2
B 0
Name: yes, dtype: uint8

per_day_group.to_frame('per_day_grp').join(
per_day_group.groupby(level=0).sum().rename('per_day'))

per_day_grp per_day
timestamp group
2016-03-01 A 1 1
B 0 1
2016-03-02 A 1 1
2016-03-03 A 2 2
B 0 2

关于python-3.x - 根据 groupby 和 TimeGrouper 之后的列条件从 pandas 数据框中获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42172106/

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