【问题标题】:Grouping data on column value按列值对数据进行分组
【发布时间】:2017-07-05 03:26:45
【问题描述】:

您好,我有数据(在 excel 和文本文件中也是如此),例如

C1   C2    C3
 1    p     a
 1    q     b
 2    r     c
 2    s     d

我想要这样的输出:

C1   C2   C3
 1   p,q  a,b
 2   r,s  c,d

如何根据列值对数据进行分组。 我对任何事物都持开放态度:任何库、任何语言、任何工具 喜欢 python、bash,甚至是 excel?

我认为我们可以在 python 中使用 pandas 来做到这一点,但我以前没有使用过。

感谢任何潜在客户。

【问题讨论】:

  • 您对任何库、任何语言、任何工具(如 python、bash 甚至 excel)都进行了哪些尝试?你有没有尝试过但失败了?
  • 到目前为止我还没有尝试过。我正在寻找最好的方法来做到这一点

标签: python excel bash pandas


【解决方案1】:

第一个pandas.read_excel - 输出是DataFrame

df = pd.read_excel('file.xlsx')

然后你可以使用groupbyagg join:

df = df.groupby('C1').agg(','.join).reset_index()
print (df)
   C1   C2   C3
0   1  p,q  a,b
1   2  r,s  c,d

如果df 中有更多列并且只需要过滤C2C3

df = df.groupby('C1')['C2','C3'].agg(','.join).reset_index()
print (df)
   C1   C2   C3
0   1  p,q  a,b
1   2  r,s  c,d

要保存到excel 文件使用DataFrame.to_excel,显然没有index

df.to_excel('file.xlsx', index=False)

【讨论】:

  • 这是在使用熊猫吗?
  • 没错,就是pandas解决方案。
  • 嗨,这是有效的。只是它没有聚合所有列。我也尝试显式使用所有列名,但仍然无法正常工作。聚合对列的数据类型有一些限制吗?未聚合的列的类型为:“日期”、“ID(varchar)”、“数字(一些数字代码)”?请在这里帮助我
  • 似乎存在名为pandas.pydata.org/pandas-docs/stable/… 的问题 - 它删除了所有数字列和join 仅字符串列。解决方案是将所有列转换为string,然后它就可以工作了。 df1 = df.astype(str).groupby('C1').agg(','.join).reset_index()
  • 但是其中一个是类型:VARCHAR,这也可能是个问题吗?另外,我可以知道数据框中每一列的数据类型吗??
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 2015-05-15
  • 2016-10-10
  • 2011-07-08
  • 2012-09-24
  • 2022-12-09
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多