python - 如何一次分组并连接多列中的多行?
问题描述
我想知道如何按单列分组并每行加入多个列字符串。
这是一个示例数据框:
df = pd.DataFrame(np.array([['a', 'a', 'b', 'b'], [1, 1, 2, 2],
['k', 'l', 'm', 'n']]).T,
columns=['a', 'b', 'c'])
print(df)
a b c
0 a 1 k
1 a 1 l
2 b 2 m
3 b 2 n
我试过类似的东西,
df.groupby(['b', 'a'])['c'].apply(','.join).reset_index()
b a c
0 1 a k,l
1 2 b m,n
但这不是我需要的输出,
期望的输出:
a b c
0 1 a,a k,l
1 2 b,b m,n
我怎样才能做到这一点?我需要一个可扩展的解决方案,因为我要处理数百万行。
解决方案
我认为您只需要按列分组b
,然后在必要时为应用函数创建列列表GroupBy.agg
:
df1 = df.groupby('b')['a','c'].agg(','.join).reset_index()
#alternative if want join all columns without b
#df1 = df.groupby('b').agg(','.join).reset_index()
print (df1)
b a c
0 1 a,a k,l
1 2 b,b m,n
推荐阅读
- swift - 如何知道 SwiftUI 中的语言是否从右到左?
- python - 准确了解数据框中的哪些行导致运行时警告
- python - 如何不允许在 DynamoDB 上删除特定项目?
- c++ - 未找到 QML 模块 (QtCharts)
- python-3.x - 无法让我的 matplotlib 文本在 pick_event 上刷新
- spring - Spring Mongo Query 不起作用 -> readName 只能在 State 为 NAME 时调用,不能在 State 为 VALUE 时调用
- apache-kafka - Kafka流反序列化异常| 记录并继续
- javascript - AWS Lambda:对 Node 运行时使用异步处理函数有什么好处?
- hadoop - MapReduce - Reducer 没有收到Combiner 的记录是否有原因?
- ssh - Ansible:在剧本中动态设置主机 SSH 端口