pandas 如何向透视表中添加列?

sqserrrh  于 2023-09-29  发布在  其他
关注(0)|答案(2)|浏览(118)

我想在下面的透视表中添加一个额外的列。新列应显示不活动比率(不活动/(不活动+活动))。
我想使用.apply,但是,我不知道如何获取数据; pivot_table.count['active']没有给予我所有活动的数据。
有人能帮我一下吗?

pivot_table = pd.pivot_table(valuable, values='partyPartnerId', 
                                index=['countryOfOrigin'], 
                                columns=['activity'], 
                                aggfunc=['count'],
                                fill_value=0)
activity          count
countryOfOrigin   active    inactive
AT                1         0
BE                1385      338
CZ                2         0
DE                61        6
DK                1         0

0wi1tuuw

0wi1tuuw1#

正如 @mozway 所指出的,通过传递aggfunc='count'而不是aggfunc=['count'],可以避免以 MultiIndex 列结束。在此之后,您可以使用eval比率或使用经典的new-column的assign

pivot_table = (
    pd.pivot_table(valuable,
        values='partyPartnerId', 
        index='countryOfOrigin',
        columns='activity',
        aggfunc='count', # use a string
        fill_value=0   
    ).eval('ratio = inactive / (inactive + active)')
)

# a variant chain woud be `.assign(ratio = lambda x: x['inactive'].div(x.sum(axis=1)))`

输出量:

print(out)

activity         active  inactive  ratio
countryOfOrigin                         
AT                    1         0 0.0000
BE                 1385       338 0.1962
CZ                    2         0 0.0000
DE                   61         6 0.0896
DK                    1         0 0.0000

使用的输入:

vals = [[1, 0], [1385, 338], [2, 0], [61, 6], [1, 0]]
idxx = pd.Index(["AT", "BE", "CZ", "DE", "DK"], name="countryOfOrigin")
cols = pd.Index([("count", "active"), ("count", "inactive")], name=(None, "activity"))

pivot_table = pd.DataFrame(vals, index=idxx, columns=cols).droplevel(0, axis=1)
hpxqektj

hpxqektj2#

解决方案:

  • pivot_table”返回“DataFrame

https://pandas.pydata.org/docs/reference/api/pandas.pivot_table.html

  • 因此,您可以在执行“pivot”之后添加列,如:

pivot_table[“inactive_ratio”] = pivot_table[“inactive”] /(pivot_table[“inactive”] + pivot_table[“active”])print(pivot_table)

相关问题