[英]Pandas - Combine multiple group rows into one row
我一直在撞墙一段时间,现在试图弄清楚 Pandas 中这个看似简单的数据操作任务,但是我没有成功弄清楚如何做到这一点或谷歌搜索足够的答案:(
我要做的就是取下面片段左侧的表格(将是 pandas 数据帧)并将其转换为右侧的表格(成为另一个 pandas 数据帧)。
用于创建初始 dataframe 的代码:
import pandas as pd
test_data = pd.DataFrame(
{
'team': [1,1,2,2,3,3,4,4,5,5] ,
'player': ['a','b','c','d','e','f','g','h','i','j'] ,
'score': [10,22,66,44,1,3,55,6,4,2]
}
)
提前谢谢你的帮助!
尝试这个,
test_data.groupby('team').agg({'player':['first', 'last'], 'score': ['first', 'last']})
输出/输出:
player_first player_last score_first score_last
team
1 a b 10 22
2 c d 66 44
3 e f 1 3
4 g h 55 6
5 i j 4 2
完整的解决方案:
test_data = test_data.groupby('team').agg({'player':['first', 'last'], 'score': ['first', 'last']})
test_data.columns = ['_'.join(x) for x in test_data.columns]
test_data = test_data.reset_index()
test_data = test_data[['team', 'player_first', 'score_first', 'player_last', 'score_last']]
输出/输出:
team player_first score_first player_last score_last
0 1 a 10 b 22
1 2 c 66 d 44
2 3 e 1 f 3
3 4 g 55 h 6
4 5 i 4 j 2
假设您的 dataframe 是按团队排序的,并且您知道每个团队正好有 2 个条目,您可以使用:
player_1_data = test_data.iloc[::2, :]
player_2_data = test_data.iloc[1::2, :]
player_1_data.set_index("team")
.add_suffix("1")
.join(player_2_data.set_index("team").add_suffix("2"))
.reset_index()
.rename({"score1": "player1_score", "score2": "player2_score"}, axis=1)
在这里,我们只是选择交替的行并将它们连接在一起以给出:
team player1 player1_score player2 player2_score
0 1 a 10 b 22
1 2 c 66 d 44
2 3 e 1 f 3
3 4 g 55 h 6
4 5 i 4 j 2
你可以这样做:
import pandas as pd
df = pd.DataFrame(
{
'team': [1,1,2,2,3,3,4,4,5,5] ,
'player': ['a','b','c','d','e','f','g','h','i','j'] ,
'score': [10,22,66,44,1,3,55,6,4,2]
}
)
grouped_df = df.groupby('team').agg({ 'player': ['first', 'last'], 'score': ['first', 'last']})
grouped_df.columns = [ 'player_first', 'score_first', 'player_last', 'score_last']
print(grouped_df)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.