按优先级合并列

2024-04-24 21:19:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的输入数据帧

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

我想将“min”和“max”列合并到具有优先级的列中(A列的优先级高于B列)。你知道吗

如果两个列都为空,则它们应该具有默认值,最小值为0,最大值为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

你能帮我一下吗?你知道吗


Tags: 数据minmaxminamaxamaxbminb
2条回答

只要使用fillna()就可以了。你知道吗

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

这可以通过使用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

相关问题 更多 >