如何使用python pandas中的.assign方法在合并的数据框中进行条件计算?
我想比较两个python pandas数据帧(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
答案 0 :(得分:1)
您可以使用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
)