【问题标题】:How to join rows in pandas dataframe based on column value?如何根据列值连接熊猫数据框中的行?
【发布时间】:2022-07-11 23:09:17
【问题描述】:

我有一个如下所示的数据框:

time text
01.01.1970 abc
01.01.1970 cde
01.01.1970 fgh
01.01.1980 abc
01.01.1980 xyz

我想根据time 列加入text 中的内容。我想加入他们,以\n 分隔。我怎样才能获得这样的数据框?

time text
01.01.1970 abc\ncde\nfgh
01.01.1980 abc\nxyz

我尝试了以下方法,但没有得到预期的结果,而是text 中的每一行我得到:text\ntime

out = (df.groupby('time', as_index=False)
       ['text'].agg(lambda x: '\n'.join(x.dropna())))

【问题讨论】:

  • 删除as_index=False
  • 为什么您提供的groupby 没有按预期工作?
  • 因为包含了as_index=False

标签: python pandas


【解决方案1】:
df.groupby('time')['text'].apply(lambda x: x.str.cat(sep='\n'))

输出:

time    text
01.01.1970  "abc\ndef"
01.01.1980  "ghi\njkl"

【讨论】:

    【解决方案2】:

    在之前删除 NaN 更容易

    df.dropna().groupby('time')['text'].agg('\n'.join)
    

    【讨论】:

    • 如果数据有其他列而不是此处包含的两个列,这可能无法按预期工作。另外,解决方案真的是另外一回事。
    【解决方案3】:

    这个答案比其他答案更长/更丑,但它至少给你一个类似于你开始的数据框。

    List = []
    for x in df.time.unique():
        List.append([x , "\n".join(df[df.time == x].text.values)])
    pd.DataFrame(List, columns = df.columns)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-26
      • 2015-05-11
      • 2023-03-17
      • 2015-08-15
      • 2020-12-27
      • 2017-11-30
      • 1970-01-01
      相关资源
      最近更新 更多