我有一个错误已经过去的数据框,其中由两个不同的单词组成的数据被分成两个单独的单元格。示例:错误已经过去的帧。例如:
col1 col2 col3 col4 col5
0 A 1 2 3
1 B C 3 4 5
2 D 6 7 8
3 B E 9 10 11
我想将来自同一行的单元格中的字母连接到一个单元格中,同时将所有其余行向左移动。要以表格形式获得结果:
col1 col2 col3 col4 col5
0 A 1 2 3
1 B C 3 4 5
2 D 6 7 8
3 B E 9 10 11
我现在正在使用df.replace(['C', 'E'], [np.nan, np.nan], regex=True)
,后来使用df.iloc[[n]].dropna(axis=1, how="any")
列。但这并不理想,因为在上面的例子中我得到了:
col1 col2 col3 col4 col5
0 A 1 2 3
1 B 3 4 5
2 D 6 7 8
3 B 9 10 11
所以两条同名的行,实际上并不属实。因为他们应该被称为' B C'和' B E'分别。另外,每次我必须手动输入单元名称才能切换到NaN,具体取决于数据。 你有什么想法吗?
答案 0 :(得分:1)
我提供的解决方案有点过分......但仍然有效
df1=df.stack().to_frame()
m=df1[0].groupby(level=0).apply(lambda x :x.str.isalpha().diff().ne(0).cumsum())
df1.groupby([df1.index.get_level_values(0),m]).sum().unstack().add_prefix('col1_')
Out[116]:
col1_0
0 col1_1 col1_2 col1_3 col1_4
0 A 1 2 3
1 BC 3 4 5
2 D 6 7 8
3 BE 9 10 11
只需改变
m=df1[0].groupby(level=0).apply(lambda x :x.str.isalpha().ne(1).cumsum())
df1.groupby([df1.index.get_level_values(0),m]).sum().unstack().add_prefix('col1_')
Out[164]:
col1_0
0 col1_0 col1_1 col1_2 col1_3
0 A 1,5 2,5 3,5
1 BC 3,5 4,5 5,5
2 D 6,5 7,5 8,5
3 BE 9,5 10,5 11,5