我有一个{列{1}}的熊猫df
数据如下所示
time, host, value
我想按以下代码对它们进行分组:-
time host value
14:00:00 inf1 5000
14:00:00 inf2 2000
14:01:00 inf1 5000
14:01:00 inf1 5000
14:01:00 inf2 2000
但是我只想对唯一主机求和,而忽略任何重复的主机。我想要的输出是
df.set_index('time').groupby([pd.Grouper(freq='1Min')]).sum()
而不是:-
time sum
14:00:00 7000
14:01:00 7000
我想在groupby期间忽略重复的主机。
答案 0 :(得分:0)
第一个想法是将array([3, 1, 0, 4, 4])
与Grouper
分组,将key='time'
列与GroupBy.first
分组,然后每秒汇总:
host
另一种解决方案,如果只有几分钟的时间,那么可以通过df = (df.groupby(['host', pd.Grouper(key='time',freq='1Min')])['value']
.first()
.sum(level=1)
.reset_index(name='sum')
)
print (df)
time sum
0 14:00:00 7000
1 14:01:00 7000
删除重复项,而通过DataFrame.drop_duplicates
删除host
项:
time
df = (df.drop_duplicates(subset=['host','time'])
.groupby([pd.Grouper(key='time',freq='1Min')])['value']
.sum()
.reset_index(name='sum'))
print (df)
time sum
0 14:00:00 7000
1 14:01:00 7000
也可以采用每组删除重复项的解决方案,但是如果有大数据,则速度会很慢:
df = (df.drop_duplicates(subset=['host','time'])
.groupby('time')['value']
.sum()
.reset_index(name='sum'))
print (df)
time sum
0 14:00:00 7000
1 14:01:00 7000