【问题标题】:concating rows with same index, removing duplicates连接具有相同索引的行,删除重复项
【发布时间】:2021-05-31 17:27:34
【问题描述】:

*这不是第一次在这里被问到但我没有看到任何与多列相关的Q

示例数据:

               1        2        3 ........
Orange        |a        |d       |e
Orange        |b        |b       |e
Black         |y        |z       |nan
Black         |x        |y       |nan
Black         |z        |nan     |nan
Black         |w        |x       |y
Blue          |g        |h       |i
Blue          |i        |nan     |nan
..

我正在尝试加入相同的索引行,并删除重复项 即橙色:a b d e

通过以下方式连接相同的索引行:

df = df.groupby(df.index).agg(lambda z: ','.join(z.astype(str)))

之后,我将所有行都用逗号连接起来,这些逗号只是镶嵌在某些列中。 我试图将它们移动到不同的列:

 df = df.columns.str.split(',',expand=True)

但它不起作用。

将它们移动到单独的列后,我将使用 drop_duplicates()。

在展开部分需要帮助。

已编辑(不需要顺序):

               1        2        3       4       5       6       7....
Orange        |a        |b       |d      |e
Black         |y        |z       |x      |w
Blue          |g        |h       |i

【问题讨论】:

    标签: python pandas split


    【解决方案1】:

    您可以通过获取每组索引的unique 值来做到这一点,一旦您stack 获取一列中的所有值,然后创建一个具有每个组唯一元素的Series。最后unstack 得到预期的输出。

    res = (
        df.stack()
          .groupby(level=0)
          .apply(lambda x: pd.Series(x.unique()))
          .unstack()
    )
    print(res)
            0  1  2    3
    Black   y  z  x    w
    Blue    g  h  i  NaN
    Orange  a  d  e    b
    

    请注意,如果nan 是字符串并且您不想要它们,您可以在groupby 之前添加.replace('nan', np.nan),它们将在unique 期间被删除。

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 2012-10-13
      • 2022-01-11
      • 1970-01-01
      • 2021-02-22
      • 2017-03-02
      • 1970-01-01
      • 2016-09-06
      相关资源
      最近更新 更多