【问题标题】:Merging columns in pandas if none如果没有,则合并熊猫中的列
【发布时间】:2021-09-01 09:02:40
【问题描述】:

我有下表(df):

ColA ColB ColC ColD
A A11 None Q1
B A21 Q12 None
A A31 S1 None
C A41 W12 None
B A76 None O91
A A90 A14 None
C A71 None 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 条件。我该如何解决?

期望的输出:

ColA ColB ColC ColD ColE
A A11 None Q1 A11
B A21 Q12 None Q12
A A31 S1 None A31
C A41 W12 None W12
B A76 None O91 O91
A A90 A14 None A90
C A71 None R31 A71

【问题讨论】:

  • ColA中除了A, B, C之外还能有其他值吗?
  • 不,只有 A、B、C。

标签: python pandas dataframe merge concatenation


【解决方案1】:

我们可以通过检查AColA 中的存在来创建一个布尔掩码,然后将此掩码与np.where 一起使用,如果掩码包含True,则从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

【讨论】:

  • 好的,我通过创建原始 df 的副本删除了警告 :)
猜你喜欢
  • 2020-04-08
  • 1970-01-01
  • 2020-04-13
  • 2022-01-24
  • 2018-03-15
  • 2015-01-08
  • 2017-04-17
  • 2021-01-08
  • 2018-05-10
相关资源
最近更新 更多