Har*_*pta 3 python nan dataframe python-3.x pandas
我有一个这样的数据框
df = (pd.DataFrame({'ID': ['ID1', 'ID2', 'ID3'],
'colA': ['A', 'B', 'C'],
'colB': ['D', np.nan, 'E']}))
df
ID colA colB
0 ID1 A D
1 ID2 B NaN
2 ID3 C E
Run Code Online (Sandbox Code Playgroud)
我想合并这两列,但是如果 B 列是 NaN,则只保留 A 列。因此预期输出是
ID colA colB colC
0 ID1 A D A_D
1 ID2 B NaN B
2 ID3 C E C_E
Run Code Online (Sandbox Code Playgroud)
从 Datanovice 的回答中了解到这一点:
df['col_c'] = df[['colA', 'colB']].stack().groupby(level=0).agg('_'.join)
df
Run Code Online (Sandbox Code Playgroud)
ID colA colB col_c
0 ID1 A D A_D
1 ID2 B NaN B
2 ID3 C E C_E
Run Code Online (Sandbox Code Playgroud)
想法添加_
到第二列_
,因此在用空字符串替换缺失值后,不会_
为缺失值添加:
df['colC'] = df['colA'] + ('_' + df['colB']).fillna('')
print (df)
ID colA colB colC
0 ID1 A D A_D
1 ID2 B NaN B
2 ID3 C E C_E
Run Code Online (Sandbox Code Playgroud)
如果不确定缺失值的位置(incolA
或colB
):
df['colC'] = (df['colA'].fillna('') + '_' + df['colB'].fillna('')).str.strip('_')
Run Code Online (Sandbox Code Playgroud)
也可以分别测试每一列:
m1 = df['colA'].isna()
m2 = df['colB'].isna()
df['colC'] = np.select([m1, m2, m1 & m2],
[df['colB'], df['colA'], np.nan],
default=df['colA'] + '_' + df['colB'])
print (df)
ID colA colB colC
0 ID1 A D A_D
1 ID2 B NaN B
2 ID3 NaN E E
3 ID4 NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4282 次 |
最近记录: |