合并 pandas 中的列 if none
Merging columns in pandas if none
我有以下 table (df):
ColA
ColB
ColC
寒冷
一个
A11
None
Q1
B
A21
Q12
None
一个
A31
S1
None
C
A41
W12
None
B
A76
None
O91
一个
A90
A14
None
C
A71
None
R31
输出 table 应包含另一列 (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
寒冷
科尔
一个
A11
None
Q1
A11
B
A21
Q12
None
Q12
一个
A31
S1
None
A31
C
A41
W12
None
W12
B
A76
None
O91
O91
一个
A90
A14
None
A90
C
A71
None
R31
A71
我们可以通过检查 ColA
中 A
的存在来创建布尔掩码,然后将此掩码与 np.where
、select 来自 [=15] 的值一起使用=] 如果掩码保持 True
否则 select 来自 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
我有以下 table (df):
ColA | ColB | ColC | 寒冷 |
---|---|---|---|
一个 | A11 | None | Q1 |
B | A21 | Q12 | None |
一个 | A31 | S1 | None |
C | A41 | W12 | None |
B | A76 | None | O91 |
一个 | A90 | A14 | None |
C | A71 | None | R31 |
输出 table 应包含另一列 (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 | 寒冷 | 科尔 |
---|---|---|---|---|
一个 | A11 | None | Q1 | A11 |
B | A21 | Q12 | None | Q12 |
一个 | A31 | S1 | None | A31 |
C | A41 | W12 | None | W12 |
B | A76 | None | O91 | O91 |
一个 | A90 | A14 | None | A90 |
C | A71 | None | R31 | A71 |
我们可以通过检查 ColA
中 A
的存在来创建布尔掩码,然后将此掩码与 np.where
、select 来自 [=15] 的值一起使用=] 如果掩码保持 True
否则 select 来自 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