对混合int和string python的dataframe使用groupby.sum()

2024-05-01 08:50:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含文本和一些值计数的数据帧,例如:

dates=['01-01-15','01-01-15','01-01-15','02-01-15','02-01-15','02-01-15','02-01-15']
df3 = pd.DataFrame({'Number':['001','001','001','002','002','002','002'],
                   'name':['peter','chris','meg','albert','cathrine','leo','leo'],
                   'dummy':[0,1,0,0,0,1,1],
                   'dates': dates})
df3.dates=pd.to_datetime(df3.dates)

现在我想按“Number”列和sum对它进行分组,这样这些值将被求和,文本将成为一个包含所有条目的列表,每个组将有一个日期

如果我使用df4=pd.DataFrame(df3.groupby('Number').sum()),它会对数字数据执行必要的操作,但会丢失text和date列

所以输出应该是这样的:

df4
Number      name                   dummy    dates
001     [peter,chris,meg]            1    01-01-15
002     [albert, cathrine, leo,leo]  2    02-01-15

Tags: 数据name文本numberdataframechrispeterdummy
1条回答
网友
1楼 · 发布于 2024-05-01 08:50:17

要使用.agg指定多个聚合函数,如listsumfirst

df3.groupby('Number', as_index=False).agg({'name':list,
                                           'dummy':'sum',
                                           'dates':'first'})

输出

  Number                          name  dummy      dates
0    001           [peter, chris, meg]      1 2015-01-01
1    002  [albert, cathrine, leo, leo]      2 2015-02-01

熊猫版>;=0.25

由于verison0.25,我们不再使用字典,而是使用元组

参见docs

df3.groupby('Number', as_index=False).agg(name_list=('name',list),
                                          dummy_sum=('dummy','sum'),
                                          dates=('dates','first'))

输出

                      name_list  dummy_sum      dates
0           [peter, chris, meg]          1 2015-01-01
1  [albert, cathrine, leo, leo]          2 2015-02-01

相关问题 更多 >