熊猫优先合并列

时间:2019-11-03 14:40:07

标签: python pandas dataframe

我的输入数据框;

    MinA  MinB   MaxA  MaxB
0   1     2      5     7
1   1     0      8     6
2   2            15    15
3         3                   
4                      10

我想优先合并它们之间的“最小”和“最大”列(A列比B列具有更高的优先级)。

如果两列均为空,则它们应具有默认值,对于min = 0表示max = 100。

所需的输出为;

    MinA MinB  MaxA MaxB      Min  Max
0   1     2      5     7      1    5
1   1     0      8     6      1    8
2   2            15    15     2    15
3         3                   3    100
4                      10     0    10

您能帮我吗?

2 个答案:

答案 0 :(得分:1)

这可以使用mask完成。使用如下数据:

df = pd.DataFrame({
    'MinA': [1,1,2,None,None],
    'MinB': [2,0,None,3,None],
    'MaxA': [5,8,15,None,None],
    'MaxB': [7,6,15,None,10],
})

# Create new Column, using A as the base, if it is Nan, then use B.
# Then do the same again using specified values
df['Min'] = df['MinA'].mask(pd.isna, df['MinB']).mask(pd.isna, 0)
df['Max'] = df['MaxA'].mask(pd.isna, df['MaxB']).mask(pd.isna, 100)

以上内容将产生所需的输出:

    MinA    MinB    MaxA    MaxB    Min     Max
0   1       2       5       7       1       5
1   1       0       8       6       1       8
2   2       NaN     15      15      2       15
3   NaN     3       NaN     NaN     3       100
4   NaN     NaN     NaN     10      0       10

答案 1 :(得分:1)

只需使用fillna()就可以了。

df['Min'] = df['MinA'].fillna(df['MinB']).fillna(0)
df['Max'] = df['MaxA'].fillna(df['MaxB']).fillna(100)