熊猫groupby与转置相关问题

时间:2018-12-02 03:07:37

标签: python pandas

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

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)

谢谢。

2 个答案:

答案 0 :(得分:0)

您应该看一下熊猫的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
)

最后在axis=1上使用concat进行连接。

答案 1 :(得分:0)

我将使用pivot()获得第一部分, 第二部分使用get_dummies(),然后将它们连接到一个数据帧中,如下所示:

part1 = df.pivot(index="Name",columns="A",values="B")
part2 = df.groupby(["Name"])["Job"].first().str.get_dummies()
ans = pd.concat([part1, part2], axis=1)