如果数据值列中的空值已经存在于另一行中,则使用该值填充该值

时间:2018-12-13 21:02:03

标签: python pandas dataframe

因此,我只是在尝试一些Python并通过为我正在玩的游戏提供某种指导来处理熊猫数据框。

我制作了一个电子表格,其中包含游戏中所有英雄及其当前最大等级装备的名称。许多英雄使用相同的装备。现在,我想在电子表格中添加一列,以添加所有设备的统计信息。我手动输入了其中一些统计信息,我希望能够填写重复项的统计信息。

我导出了我的csv并将其加载到数据帧中。这是我的数据框外观的一个小例子。

Hero Item     Stats
1    Item 1    10 HP, 10 Damage
1    Item 2    10 Armor, 10 Tenacity
1    Item 3    10% Healing, 10 Armor
1    Item 3    
2    Item 4    10 Skill Power
2    Item 5    10 HP, 10 Skill Power
2    Item 3
2    Item 1    
3    Item 1
3    Item 4
3    Item 5
3    Item 2    
4    Item 6    5 Crit
4    Item 1
4    Item 4
4    Item 7    25 Skill Power

每个英雄都有4个物品槽。在此代码段中,有7个独特的项目。某些物品可以由一个英雄装备一次以上,而某些物品可以由一个以上英雄装备。

所以我想获取我已经预先填充的统计信息,并填写剩余的空白统计信息。这样看起来像这样:

Hero Item     Stats
1    Item 1    10 HP, 10 Damage
1    Item 2    10 Armor, 10 Tenacity
1    Item 3    10% Healing, 10 Armor
1    Item 3    10% Healing, 10 Armor
2    Item 4    10 Skill Power
2    Item 5    10 HP, 10 Skill Power
2    Item 3    10% Healing, 10 Armor
2    Item 1    10 HP, 10 Damage
3    Item 1    10 HP, 10 Damage
3    Item 4    10 Skill Power
3    Item 5    10 HP, 10 Skill Power
3    Item 2    10 Armor, 10 Tenacity
4    Item 6    5 Crit
4    Item 1    10 HP, 10 Damage
4    Item 4    10 Skill Power
4    Item 7    25 Skill Power

我用字典尝试了一些东西,但是遇到了这个错误:“系列”对象是可变的,因此不能进行哈希处理。我还在另一个线程中读到,遍历熊猫数据帧不是很有效吗?

所以我只是想知道你们所有人将如何解决这一任务。我只是希望能够填写指南,而无需一遍又一遍地手动复制和粘贴我的统计信息。谢谢!

2 个答案:

答案 0 :(得分:2)

尝试此操作,创建一系列带有统计信息的商品,然后使用map获取所有商品的统计信息:

mapper = df[df.Stats.notnull()].set_index('Item')['Stats']
df['Stats'] = df['Item'].map(mapper)
print(df)

输出:

    Hero    Item                  Stats
0      1  Item 1       10 HP, 10 Damage
1      1  Item 2  10 Armor, 10 Tenacity
2      1  Item 3  10% Healing, 10 Armor
3      1  Item 3  10% Healing, 10 Armor
4      2  Item 4         10 Skill Power
5      2  Item 5  10 HP, 10 Skill Power
6      2  Item 3  10% Healing, 10 Armor
7      2  Item 1       10 HP, 10 Damage
8      3  Item 1       10 HP, 10 Damage
9      3  Item 4         10 Skill Power
10     3  Item 5  10 HP, 10 Skill Power
11     3  Item 2  10 Armor, 10 Tenacity
12     4  Item 6                 5 Crit
13     4  Item 1       10 HP, 10 Damage
14     4  Item 4         10 Skill Power
15     4  Item 7         25 Skill Power

答案 1 :(得分:1)

您可以对项目和填充项进行分组

df['Stats'] = df.groupby('Item').Stats.ffill().bfill()


   Hero Item    Stats
0   1   Item 1  10 HP, 10 Damage
1   1   Item 2  10 Armor, 10 Tenacity
2   1   Item 3  10% Healing, 10 Armor
3   1   Item 3  10% Healing, 10 Armor
4   2   Item 4  10 Skill Power
5   2   Item 5  10 HP, 10 Skill Power
6   2   Item 3  10% Healing, 10 Armor
7   2   Item 1  10 HP, 10 Damage
8   3   Item 1  10 HP, 10 Damage
9   3   Item 4  10 Skill Power
10  3   Item 5  10 HP, 10 Skill Power
11  3   Item 2  10 Armor, 10 Tenacity
12  4   Item 6  5 Crit
13  4   Item 1  10 HP, 10 Damage
14  4   Item 4  10 Skill Power
15  4   Item 7  25 Skill Power