如何在熊猫中使用 .assign 方法有条件地分配计算列?



如何在合并的数据帧中使用python熊猫中的.assign 方法进行条件计算?

我想比较一列两个 python 熊猫数据帧(a 和 b(。我正在使用熊猫 0.25.1。将数据帧合并到新的数据帧后,我使用.assign方法创建一个新列,然后使用 lambda 函数计算指定列之间的绝对和相对增量。

我怎样才能进行这样的条件计算:如果value_x是 NaN,则使用 -value_y,如果value_y是 NaN,则使用 +value_x?对于第二个分配,我需要计算:如果value_x是 NaN,则使用 -100,如果value_y是 NaN,则使用 +100。我怎样才能做到这一点?

import pandas as pd
#intialise data of lists.
data_a = {
'id': [1, 2, 3, 4],
'name': ['tom', 'nick', 'krish', 'jack'],
'value': [20, 21, 19, 18]
}
data_b = {
'id': [2, 3, 4, 5],
'name': ['nick', 'krish', 'jack', 'freddy'],
'value': [30, 15, 19, 20]
}
# Create DataFrame
df_a = pd.DataFrame(data_a)
df_b = pd.DataFrame(data_b)
# merge the frames
df_concat = pd.merge(df_a, df_b, on=['id',  'name'], how='outer')
# Calculate differences
print(df_concat.assign(delta_abs=lambda x: x.value_x -x.value_y,delta_perc=lambda x: (x.value_x/x.value_y-1)*100)) 
id    name  value_x  value_y  delta_abs  delta_perc
0   1     tom     20.0      NaN        NaN         NaN
1   2    nick     21.0     30.0       -9.0  -30.000000
2   3   krish     19.0     15.0        4.0   26.666667
3   4    jack     18.0     19.0       -1.0   -5.263158
4   5  freddy      NaN     20.0        NaN         NaN

您可以使用fillna()

df_concat.assign(
delta_abs=lambda x: x.value_x.fillna(0) -x.value_y.fillna(0),
delta_perc=lambda x: (
x.value_x.fillna(x.value_y)/
x.value_y.fillna(x.value_x)
)*100
)

最新更新