gpt4 book ai didi

python - 如何扁平化 Dataframe(pandas) 的特定列?

转载 作者:行者123 更新时间:2023-11-28 17:01:38 26 4
gpt4 key购买 nike

我的数据库中有一个非常大的游戏记录数据集。假设一个数据框是它的一部分,代表一个游戏,例如:

+----------+------+------+-------+----------+------------+-----+----------------+
| _id_game | age | rank | grade | time | date | ... | _id_player |
+----------+------+------+-------+----------+------------+-----+----------------+
| key2589 | 14.0 | 1.0 | B | 00:02:34 | 2015/08/02 | ... | maximi-125 |
| key2589 | 28.0 | 2.0 | A | 00:02:50 | 2015/08/02 | ... | scooby-897 |
| key2589 | 16.0 | 3.0 | B | 00:03:21 | 2015/08/02 | ... | zorro-003 |
| key2589 | 30.0 | 4.0 | D | 00:03:45 | 2015/08/02 | ... | barabapapa-007 |
+----------+------+------+-------+----------+------------+-----+----------------+

上面这个数据框的每一行代表这个游戏的一个玩家。我想在每一行中显示游戏中所有其他玩家的一些特征(因此每个玩家与其竞争对手相比)。

我想像这样修改数据框:

+----------+------+------+-------+----------+------------+--------+--------+--------+----------+-----+----------------+
| _id_game | age | rank | grade | time | date | p1_age | p2_age | p3_age | p1_grade | ... | _id_player |
+----------+------+------+-------+----------+------------+--------+--------+--------+----------+-----+----------------+
| key2589 | 14.0 | 1.0 | B | 00:02:34 | 2015/08/02 | 28.0 | 16.0 | 30.0 | A | ... | maximi-125 |
| key2589 | 28.0 | 2.0 | A | 00:02:50 | 2015/08/02 | 14.0 | 16.0 | 30.0 | B | ... | scooby-897 |
| key2589 | 16.0 | 3.0 | B | 00:03:21 | 2015/08/02 | 14.0 | 28.0 | 30.0 | B | ... | zorro-003 |
| key2589 | 30.0 | 4.0 | D | 00:03:45 | 2015/08/02 | 14.0 | 28.0 | 16.0 | B | ... | barabapapa-007 |
+----------+------+------+-------+----------+------------+--------+--------+--------+----------+-----+----------------+

如您所见,我不会重复字段 date 或 _id_game。只是具体的领域是玩家的特点。

主要思想是对一个领域进行预测,考虑到一行代表的每个人的其他竞争对手的存在。

考虑到一个 df 只是一个游戏,我不知道如何在 pandas 数据框中做到这一点。考虑到数据框包含一堆游戏,这就更复杂了。

有人帮我吗?

最佳答案

这是一个交叉连接问题,在连接之后我们需要过滤以排除每行重复项,然后重新格式化输出

s=df[['_id_game','rank']].merge(df[['_id_game','age','rank','grade']],on='_id_game')#  merge here
s=s[s.rank_x!=s.rank_y]# filter the one already have
s=s.assign(key=s.groupby(['_id_game','rank_x']).cumcount()+1)# ge tthe key for pivot
s=s.set_index(['_id_game','rank_x','key'])[['age','grade']].unstack() # reformat
s.columns=s.columns.map('P{0[1]}_{0[0]}'.format)# flatten the columns
s
Out[850]:
P1_age P2_age P3_age P1_grade P2_grade P3_grade
_id_game rank_x
key2589 1.0 28.0 16.0 30.0 A B D
2.0 14.0 16.0 30.0 B B D
3.0 14.0 28.0 30.0 B A D
4.0 14.0 28.0 16.0 B A B

这里你只需要merge回到原始数据框检查link

关于python - 如何扁平化 Dataframe(pandas) 的特定列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54012575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com