首页 > 解决方案 > Python DataFrames concat 或 append 问题

问题描述

我对 Python 中的数据框有疑问。我正在尝试将某些行复制到新的数据框中,但我无法弄清楚。

有2个数组:

口袋妖怪数据

    # HP 攻击防御 Sp。Atk Sp。默认速度
0 1 45 49 49 65 65 45
1 2 60 62 63 80 80 60
2 3 80 82 83 100 100 80
3 4 80 100 123 122 120 80
4 5 39 52 43 60 50 65
………………………………
795 796 50 100 150 100 150 50
796 797 50 160 110 160 110 110
797 798 80 110 60 150 130 70
798 799 80 160 60 170 130 80
799 800 80 110 120 130 90 70

800 行 × 7 列
战斗数据


    First_pokemon Second_pokemon 获胜者
0 266 298 1
1 702 701 1
2 191 668 1
3 237 683 1
4 151 231 0
………………
49995 707 126 0
49996 589 664 0
49997 303 368 1
49998 109 89 0
49999 9 73 0

50000 行 × 3 列

我用列创建了第三个数据集:

输出1

    HP0 攻击0 防御0 Sp。Atk0 Sp。Def0 Speed0 HP1 Attack1 Defense1 Sp。Atk1 Sp。Def1 速度 1 获胜者

我想要做的是将属性从pokemon_data复制到output1中的顺序从contrasts_data

HP0 和 HP1 分别是第一个 Pokemon 的 HP 和第二个 Pokemon 的 HP。

我想在带有 TensorFlow 的神经网络中使用这些数据来预测 Pokemon 会赢得什么。

标签: pythonarrayspandasnumpydataset

解决方案


对于这种类型的争吵,您应该首先“融化”或“整理”,combats_data以便每个 ID 都有自己的行,然后对两个数据帧进行“连接”或“合并”。

您没有提供最低限度的可重现示例,所以这是我的:

import pandas as pd

df1 = pd.DataFrame({'id': [1,2,3,4,5],
                    'var1': [10,20,30,40,50],
                    'var2': [15,25,35,45,55]})
df2 = pd.DataFrame({'id1': [1,2],
                    'id2': [3,4],
                    'outcome': [1,4]})

df2tidy = pd.melt(df2, id_vars=['outcome'], value_vars=['id1', 'id2'],
                  var_name='name', value_name='id')

df2tidy
#   outcome name    id
# 0 1       id1     1
# 1 4       id1     2
# 2 1       id2     3
# 3 4       id2     4


output = pd.merge(df2tidy, df1, on='id')

output
#   outcome name    id  var1    var2
# 0 1       id1     1   10      15
# 1 4       id1     2   20      25
# 2 1       id2     3   30      35
# 3 4       id2     4   40      45

然后你可以在outcome.

(顺便说一句,您应该outcome输入 0 或 1(对于 pokemon1 与 pokemon2)而不是获胜者的实际 ID。)


推荐阅读