我有一个看起来像这样的数据框。
key A1 A2 A3 BX CX DX
1 X1 Y1 B1 C1 D1
2 X2 Z2 B2 C2 D2
3 X3 B3 C3 D3
4 X4 B4 C4 D4
5 B5 C5 D5
我正在尝试形成一个新的col'NC',它从A1,A2和A3列连接起来。如果某列中没有条目,则下一列需要前进。分隔符可以是“,”或“_”
最终的df看起来像
key A1 A2 A3 BX CX DX NC
1 X1 Y1 B1 C1 D1 X1_Y1
2 X2 Z2 B2 C2 D2 X2_Z2
3 X3 B3 C3 D3 X3
4 X4 B4 C4 D4 X4
5 B5 C5 D5
如果A1-A3中没有条目,那么NC中的条目仍然是空白的。我已经查看了SO中的其他帖子并尝试了其他方法,但我似乎无法做到正确。 A1-A3列中的条目是浮点数,有时在数字后面有一个0(X2.0)。我也想删除小数和0。希望有更多知识渊博的人可以告诉我方式。
编辑Q以更改数据框中的数据类型
key A1 A2 A3 BX CX DX
1 1.0 2.0 B1 C1 D1
2 3 4 B2 C2 D2
3 7.0 B3 C3 D3
4 5 6.0 7.0 B4 C4 D4
5 B5 C5 D5
新的df看起来像
key A1 A2 A3 BX CX DX NC
1 1.0 2.0 B1 C1 D1 1_2
2 3 4 B2 C2 D2 3_4
3 7.0 B3 C3 D3 7
4 5 6.0 7.0 B4 C4 D4 5_6_7
5 B5 C5 D5
您可以使用filter
过滤列,并使用agg
加入:
# Extract columns
v = df.filter(like='A')
# Convert blanks to NaNs so we can call Series.dropna later.
df['NC'] = v[v.astype(bool)].agg(lambda x: '_'.join(x.dropna()), axis=1)
# Or,
# df['NC'] = v[v.astype(bool)].agg(
# lambda x: x.dropna().str.cat(sep='_'), axis=1)
print(df)
key A1 A2 A3 BX CX DX NC
0 1 X1 Y1 B1 C1 D1 X1_Y1
1 2 X2 Z2 B2 C2 D2 X2_Z2
2 3 X3 B3 C3 D3 X3
3 4 X4 B4 C4 D4 X4
4 5 B5 C5 D5