熊猫数据框任意两列之间的百分比差异

新手上路,请多包涵

我想为任意两个 pandas 列之间的百分比差异计算定义一个函数。假设我的数据框定义为:

 R1  R2    R3    R4   R5    R6
 A   B     1     2    3     4

我希望我的计算定义为

df['R7'] = df[['R3','R4']].apply( method call to calculate perc diff)

df['R8'] = df[['R5','R6']].apply(same method call to calculate perc diff)

我怎样才能做到这一点?

我在下面尝试过

df['perc_cnco_error'] = df[['CumNetChargeOffs_x','CumNetChargeOffs_y']].apply(lambda x,y: percCalc(x,y))

def percCalc(x,y):
    if x<1e-9:
        return 0
    else:
        return (y - x)*100/x

它给了我错误信息

TypeError: (‘() 恰好接受 2 个参数(给定 1 个)’,u’发生在索引 CumNetChargeOffs_x’)

原文由 user1124702 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 882
1 个回答

用最简单的话来说:

 def percentage_change(col1,col2):
    return ((col2 - col1) / col1) * 100

您可以将它应用于数据框的任意两列:

 df['a'] = percentage_change(df['R3'],df['R4'])
df['b'] =  percentage_change(df['R6'],df['R5'])

>>> print(df)

  R1 R2  R3  R4  R5  R6      a     b
0  A  B   1   2   3   4  100.0 -25.0

等价地使用 pandas 算术运算函数

def percentage_change(col1,col2):
    return ((col2.sub(col1)).div(col1)).mul(100)

您还可以利用 pandas 内置 pct_change 计算所有传递的列的百分比变化,并选择要返回的列:

 df['R7'] = df[['R3','R4']].pct_change(axis=1)['R4']
df['R8'] = df[['R6','R5']].pct_change(axis=1)['R5']

>>> print(df)

  R1 R2  R3  R4  R5  R6      a     b   R7    R8
0  A  B   1   2   3   4  100.0 -25.0  1.0 -0.25

设置:

 df = pd.DataFrame({'R1':'A','R2':'B',
                   'R3':1,'R4':2,'R5':3,'R6':4},
                  index=[0])

原文由 sophocles 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题