具有来自同一行的字符的单元组合成一个单元

时间:2017-11-09 18:00:28

标签: python pandas

我有一个错误已经过去的数据框,其中由两个不同的单词组成的数据被分成两个单独的单元格。示例:错误已经过去的帧。例如:

    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,具体取决于数据。 你有什么想法吗?

1 个答案:

答案 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