繁体   English   中英

如果没有,则合并 Pandas 中的列

[英]Merging columns in pandas if none

我有下表(df):

可乐 哥伦比亚大学 柯尔克 寒冷的
一种 A11 没有任何 第一季度
A21 Q12 没有任何
一种 A31 S1 没有任何
C A41 W12 没有任何
A76 没有任何 O91
一种 A90 A14 没有任何
C A71 没有任何 R31

输出表应包含另一列 (ColE),使得 ColA 值 A 始终来自 ColB,B 和 C 来自 ColC、ColD。 如果 ColC 值为 none,则应从 ColD 获取值。 到目前为止我尝试了什么?

if 'A' in df.ColA:
        df['ColE'] = df['ColB']
elif 'B' or 'C' in df.ColA:
        df['ColE']=df['ColC'].fillna(df['ColD'])

要么

df['ColE']=[df['ColB'] if 'A' in df['ColA'] else df['ColC'].fillna(df['ColD'])]

但是,这不会合并所有值。 它只适用于一个 if 条件。 我该如何解决?

期望的输出:

可乐 校本 柯尔克 寒冷的 油菜
一种 A11 没有任何 第一季度 A11
A21 Q12 没有任何 Q12
一种 A31 S1 没有任何 A31
C A41 W12 没有任何 W12
A76 没有任何 O91 O91
一种 A90 A14 没有任何 A90
C A71 没有任何 R31 A71

我们可以通过检查的情况下创建一个布尔口罩AColA ,然后用这个面膜用np.where ,从选择值ColB如果屏蔽持有True ,否则选择的值ColC / ColD优先考虑ColC

m = df['ColA'].eq('A')
df['ColE'] = np.where(m, df['ColB'], df['ColC'].fillna(df['ColD']))

  ColA ColB  ColC  ColD ColE
0    A  A11  None    Q1  A11
1    B  A21   Q12  None  Q12
2    A  A31    S1  None  A31
3    C  A41   W12  None  W12
4    B  A76  None   O91  O91
5    A  A90   A14  None  A90
6    C  A71  None   R31  R31

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM