如何在合并的数据帧中使用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
)