首页 > 解决方案 > Pandas groupby 和转置相关问题

问题描述

目前我正在研究熊猫数据框。面临与分组操作相关的问题。我的数据框是 -

Name    A          Job       B
A      Online      Govt      22
B      Offline     Pvt       50
C      Others      Other     33
A      Others      Govt      62
B      Online      Pvt       18
C      Offline     Other     35
A      Offline     Govt      53
B      Online      Pvt       75
C      Others      Other     74

我的最终输出应该是 -

Name   Offline    Online   Others   Govt   Pvt  Other
A       53        20        62        1      0    0
B       50        18        75        0      1    0
C       35        74        33        0      0    1

我已经完成了以下代码 -

data = pd.read_csv('/Users../pandas_data/abc1.csv')
df3 = data.groupby(['Name', 'A'])['B']\
   .first()\
   .unstack(fill_value='NA')\
   .rename_axis(None, 1)

提前致谢。

标签: pythonpandas

解决方案


你应该看看 pandas' pivot_table,你可以使用输出的第二部分

pd.pivot_table(
    data=df.drop(columns='A'),
    index=['Name'],
    columns=['Job'],
    aggfunc=lambda x: int(len(x) > 0),
    fill_value=0
)

这将产生

        B          
Job  Govt Other Pvt
Name               
A       1     0   0
B       0     0   1
C       0     1   0

然后为第一部分做类似的事情(不知道如何解释..),比如

pd.pivot_table(
    data=df.drop(columns='Job'),
    index=['Name'],
    columns=['A'],
    aggfunc= # depends on what you expect
)

最后使用concatover连接axis=1


推荐阅读