将数据聚合到多个列中

2024-05-29 07:09:01 发布

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

我有一个包含未聚合数据的数据帧,如下所示:

df[['UniqueID ', 'SrvDesc']]

    UniqueID SrvDesc
0   HEF104  Cash 
1   HEF104  Credit
2   HEF104  Deposit 
3   HEF104  Ticket
4   HEF104  Electronic
5   HEF197  Check
6   HEF197  Credit
7   HEF198  Credit
8   HEF198  Electronic
9   HEF198  Check

10 rows × 2 columns

如您所见,对应于每个UniqueID,SrvDesc有任意数量的唯一值(HEF104有5个唯一的SrvDesc值,HEF198有3个,以此类推)

我要做的是执行一些操作,允许我在UniqueID上进行聚合,以便每个UniqueID有一行,然后填充任意数量的列,其中包含给定UniqueID的SrvDesc的每个值:

    UniqueID SrvDesc_1  SrvDesc_2   SrvDesc_3   SrvDesc_4   SrvDesc_5
0   HEF104   Cash       Credit      Deposit     Ticket      Electronic
1   HEF197   Check      Credit
2   HEF198   Credit     Electronic  Check

我一直在研究pivotunstack,它们看起来非常有用,但我不确定它们是否能让我完成我在这里要做的事情

谢谢


Tags: 数据df数量checkcashticketrowselectronic
1条回答
网友
1楼 · 发布于 2024-05-29 07:09:01

用途:

df2['count']=df2.groupby('UniqueID').cumcount()+1
df2['count']='SrvDesc_'+df2['count'].astype('str')
new_df=df2.set_index(['UniqueID','count']).unstack('count')['SrvDesc'].reset_index()
print(new_df)

count UniqueID SrvDesc_1   SrvDesc_2 SrvDesc_3 SrvDesc_4   SrvDesc_5
0       HEF104      Cash      Credit   Deposit    Ticket  Electronic
1       HEF197     Check      Credit       NaN       NaN         NaN
2       HEF198    Credit  Electronic     Check       NaN         NaN

如果要删除列的名称:

new_df.columns.name=None
print(new_df)

      UniqueID SrvDesc_1   SrvDesc_2 SrvDesc_3 SrvDesc_4   SrvDesc_5
0       HEF104      Cash      Credit   Deposit    Ticket  Electronic
1       HEF197     Check      Credit       NaN       NaN         NaN
2       HEF198    Credit  Electronic     Check       NaN         NaN

如果需要,fillna可以为^{}方法中的fill\u value字段指定一些值

df2['count']=df2.groupby('UniqueID').cumcount()+1
df2['count']='SrvDesc_'+df2['count'].astype('str')
new_df=df2.set_index(['UniqueID','count']).unstack('count',fill_value='')['SrvDesc'].reset_index()
new_df.columns.name=None
print(new_df)

      UniqueID SrvDesc_1   SrvDesc_2 SrvDesc_3 SrvDesc_4   SrvDesc_5
0       HEF104      Cash      Credit   Deposit    Ticket  Electronic
1       HEF197     Check      Credit                                
2       HEF198    Credit  Electronic     Check      

相关问题 更多 >

    热门问题