Python/Pandas:如何将2列拆分为单独的记录?

2024-06-11 12:12:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个口袋妖怪的数据框(这是它的头): enter image description here

我希望能够根据口袋妖怪的类型进行分析。我的问题是有一个类型为1的列和一个类型为2的列。我很感兴趣的是,如果是类型1或类型2,我会按类型查看总统计数据。我该怎么解决这个问题?我的猜测是,我必须为每个pokemon创建一个第二行,将其类型\u2作为type,并将原始记录的类型\u1更改为type。我该怎么在熊猫身上做呢?你知道吗

编辑:我感兴趣的输出示例如下:
草:平均生命:300,平均攻击:50,平均防御:60….
毒药:平均气血308,平均攻击60,平均防御40。
... 你知道吗


Tags: 数据编辑示例类型type感兴趣统计数据按类型
2条回答

所以我觉得皮尔斯广场很棒。如果您希望输出与您的问题完全相同,请尝试以下操作:

types = set(df["Type_1])
types.add(df["Type_2])
data_columns = ["HP, "Attack", "Defense"]
for type_ in types:
    avgs = df[(df["Type_1"]==type_) | (df["Type_2"]==type_)][data_columns].mean()
    response = """{type}: Average Hp: {hp}, Average Attack: {attack},
               Average Defense: {defense}""".format(type=type_, hp=avg["HP"], 
                                                    attack=avg["Attack], 
                                                    defense=avg["Defense"])

考虑数据帧df

df = pd.DataFrame([
        ['Fire', 'Poison', 300, 30, 10],
        ['Poison', 'Grass', 250, 20, 15]
    ], columns=['Type1', 'Type2', 'HP', 'Attack', 'Defense'])

    Type1   Type2   HP  Attack  Defense
0    Fire  Poison  300      30       10
1  Poison   Grass  250      20       15

使用pd.melt

stat_cols = ['HP', 'Attack', 'Defense']
type_cols = ['Type1', 'Type2']
melted = pd.melt(df, stat_cols, type_cols, value_name='Type')
melted.groupby('Type')[stat_cols].mean()

           HP  Attack  Defense
Type                          
Fire    300.0    30.0     10.0
Grass   250.0    20.0     15.0
Poison  275.0    25.0     12.5

额外学分 使用describe

stat_cols = ['HP', 'Attack', 'Defense']
type_cols = ['Type1', 'Type2']
melted = pd.melt(df, stat_cols, type_cols, value_name='Type')
melted.groupby('Type')[stat_cols].describe()


                      HP     Attack    Defense
Type                                          
Fire   count    1.000000   1.000000   1.000000
       mean   300.000000  30.000000  10.000000
       std           NaN        NaN        NaN
       min    300.000000  30.000000  10.000000
       25%    300.000000  30.000000  10.000000
       50%    300.000000  30.000000  10.000000
       75%    300.000000  30.000000  10.000000
       max    300.000000  30.000000  10.000000
Grass  count    1.000000   1.000000   1.000000
       mean   250.000000  20.000000  15.000000
       std           NaN        NaN        NaN
       min    250.000000  20.000000  15.000000
       25%    250.000000  20.000000  15.000000
       50%    250.000000  20.000000  15.000000
       75%    250.000000  20.000000  15.000000
       max    250.000000  20.000000  15.000000
Poison count    2.000000   2.000000   2.000000
       mean   275.000000  25.000000  12.500000
       std     35.355339   7.071068   3.535534
       min    250.000000  20.000000  10.000000
       25%    262.500000  22.500000  11.250000
       50%    275.000000  25.000000  12.500000
       75%    287.500000  27.500000  13.750000
       max    300.000000  30.000000  15.000000

相关问题 更多 >