始终以相同的值聚合熊猫数据框

我正在尝试通过汇总一列从熊猫数据框中排除不必要的行。数据框如下所示:

df1=pd.DataFrame({'date':[20191121]*10,'time':[100000]*10,'last':[64131,64131,64130,64132,64130],'vol':[1]*10})

print(df1)
       date    time   last  vol
0  20191121  100000  64131    1
1  20191121  100000  64131    1
2  20191121  100000  64130    1
3  20191121  100000  64130    1
4  20191121  100000  64130    1
5  20191121  100000  64131    1
6  20191121  100000  64131    1
7  20191121  100000  64132    1
8  20191121  100000  64130    1
9  20191121  100000  64130    1

我想要这样的数据框:

df2=pd.DataFrame({'date':[20191121]*5,'time':[100000]*5,'vol':[2,3,2,1,2]})

print(df2)
       date    time   last  vol
0  20191121  100000  64131    2
1  20191121  100000  64130    3
2  20191121  100000  64131    2
3  20191121  100000  64132    1
4  20191121  100000  64130    2

您能帮我解决这个问题吗?

samebean 回答:始终以相同的值聚合熊猫数据框

您可以聚合sum,但也有必要为lastgroupby的连续值添加帮助器系列:

g = df1['last'].ne(df1['last'].shift()).cumsum()
df = df1.groupby(['date','time','last',g],sort=False,as_index=False)['vol'].sum()
print(df)
       date    time   last  vol
0  20191121  100000  64131    2
1  20191121  100000  64130    3
2  20191121  100000  64131    2
3  20191121  100000  64132    1
4  20191121  100000  64130    2

如果要使用所有3列的连续值:

c = ['date','last']
g = df1[c].ne(df1[c].shift()).any(axis=1).cumsum()

df = df1.groupby(c + [g],as_index=False)['vol'].sum()
print(df)
       date    time   last  vol
0  20191121  100000  64131    2
1  20191121  100000  64130    3
2  20191121  100000  64131    2
3  20191121  100000  64132    1
4  20191121  100000  64130    2
本文链接:https://www.f2er.com/3052945.html

大家都在问