python - 加入每个组中的字符串并分配回原始 DataFrame
问题描述
我有两列的数据框:user
和lang
。每个用户都知道一种或多种语言:
lang user
0 Python Mike
1 Scala Mike
2 R John
3 Julia Michael
4 Java Michael
user
我需要以他/她知道的所有语言获取每一行。我可以这样做:
df.groupby('user')['lang'].apply(lambda x:', '.join(x)).reset_index()
但我明白了:
user lang
0 John R
1 Michael Julia, Java
2 Mike Python, Scala
而不是我想要的:
lang user
0 Python,Scala Mike
1 Python,Scala Mike
2 R John
3 Julia,Java Michael
4 Julia,Java Michael
重现代码:
import pandas as pd
df = pd.DataFrame({"lang":["Python","Scala","R","Julia","Java"],
"user":["Mike","Mike","John","Michael","Michael"]})
print(df)
解决方案
用于transform
将结果“广播”groupby
到输入中的每一行。
df['lang'] = df.groupby('user')['lang'].transform(', '.join)
df
lang user
0 Python, Scala Mike
1 Python, Scala Mike
2 R John
3 Julia, Java Michael
4 Julia, Java Michael
推荐阅读
- powershell - PowerShell:POST(小负载测试)后缺少 HTTP 响应代码
- nginx - NGINX config File error for Flask/waitress
- laravel - How to test array in AssertableJson in Laravel 8?
- c - 不确定如何处理来自 pigpio 的 CMake 文件
- python - 求解非线性方程组
- sql-server - 如何将 accdb 数据库从 Access 导入 SQL Server 2019?
- sql - 如何从 Access 数据库 VB.net 中检索特定数据?
- asp.net - 该进程无法访问文件“C:\FolderStructure\APP\pic.jpg”,因为它正被另一个进程使用。网
- c# - 使用 Win32.Registry 在 Windows 10 中查找默认邮件客户端
- c# - 我需要使用 c# 将一个游戏对象旋转到 Unity 中的另一个游戏对象,但我希望旋转仅在 z 中