python - Python df groupby 带有用于字符串和总和的 agg
问题描述
因此,所有内容都应按第 0 列聚合,并且应添加第 1 列中的所有字符串,并且当第 1 列中的字符串具有相同名称时,应将第 2 列中的数字相加。
使用以下代码,我可以聚合字符串,但无需对数字求和:
df2= df1.groupby([0]).agg(lambda x: ','.join(set(x))).reset_index()
df2
解决方案
避免任意数量的列
您所需的输出表明您有任意数量的列,具体取决于1
每个 group中的值的数量0
。这是反熊猫,它强烈地面向任意数量的行。因此,串行操作是首选。
因此,您可以使用groupby
+sum
来存储您需要的所有信息。
df = pd.DataFrame({0: ['2008-04_E.pdf']*3,
1: ['Mat1', 'Mat2', 'Mat2'],
2: [3, 1, 1]})
df_sum = df.groupby([0, 1]).sum().reset_index()
print(df_sum)
0 1 2 0 2008-04_E.pdf Mat1 3 1 2008-04_E.pdf Mat2 2
但如果你坚持...
如果你坚持你的不寻常的要求,你可以通过df_sum
上面的计算来实现它。
key = df_sum.groupby(0)[1].cumcount().add(1).map('Key{}'.format)
res = df_sum.set_index([0, key]).unstack().reset_index().drop('key', axis=1)
res.columns = res.columns.droplevel(0)
print(res)
键 1 键 2 键 1 键 2 0 2008-04_E.pdf Mat1 Mat2 3 2
推荐阅读
- javascript - 销毁 merge() 运算符订阅?
- apache - 如何解决图片上传失败的问题?
- java - 多个 Jackson XML 自定义 (XMLStreamWriter) 序列化程序抛出异常
- excel - 尝试在 2 个工作簿上使用文本到列功能(分隔)但出现错误
- linux - Mono 5.20.1.19 崩溃和运行时和类库不同步警告
- php - 你可以在 CouchDB 视图上执行 CRUD 吗?
- tensorflow - MNIST 的极端过拟合 CNN
- r - 在 R 格式表中结合 color_bar(...) 和 percent(...)
- java - 如何找到网络元素
- reactjs - 我尝试获取数据 com The Movie db api 但出现此错误:“TypeError: Cannot read property '0' of null”