我有一些数据看起来像
pd.DataFrame([
{'col1': 'x', 'col2': 'name_x', 'col3': '', 'col4': '', 'col5': '', 'col6': ''},
{'col1':'', 'col2':'', 'col3': 'y', 'col4':'name_y', 'col5': '', 'col6':''},
{'col1':'', 'col2':'', 'col3': 'yy', 'col4':'name_yy', 'col5': '', 'col6':''},
{'col1':'', 'col2':'', 'col3': '', 'col4':'', 'col5': 'z', 'col6':'name_z'},
{'col1':'xx', 'col2':'name_xx', 'col3': '', 'col4':'', 'col5': '', 'col6':''},
{'col1':'', 'col2':'', 'col3': 'yyy', 'col4':'name_yyy', 'col5': '', 'col6':''}
])
col1 col2 col3 col4 col5 col6
0 x name_x
1 y name_y
2 yy name_yy
3 z name_z
4 xx name_xx
5 yyy name_yyy
我需要将所有数据推送到最左边的列,即。 col1
和 col2
最终数据应如下所示:
col1 col2
0 x name_x
1 y name_y
2 yy name_yy
3 z name_z
4 xx name_xx
5 yyy name_yyy
答案 0 :(得分:6)
df = df.transform(lambda x: sorted(x, key=lambda k: k == ""), axis=1)
print(df)
打印:
col1 col2 col3 col4 col5 col6
0 x name_x
1 y name_y
2 yy name_yy
3 z name_z
4 xx name_xx
5 yyy name_yyy
如果你想要两列,那么你可以在之后做 print(df[["col1", "col2"]])
。
答案 1 :(得分:1)
out = (df.agg(" ".join, axis=1)
.str.split(expand=True)
.rename(columns={0: "col1", 1: "col2"}))
agg
重新排列行,join
用空格对它们进行重新排列,然后在空格上split
,最后为输出重命名列。
得到
col1 col2
0 x name_x
1 y name_y
2 yy name_yy
3 z name_z
4 xx name_xx
5 yyy name_yyy