【问题标题】:Pandas creating a new table and convert it to wide formatPandas 创建一个新表并将其转换为宽格式
【发布时间】:2022-12-01 11:21:45
【问题描述】:

我有这个数据框。

Type   Generation
Grass           1
Grass           1
Fire            1
Fire            1
Grass           2
Grass           3

我正在尝试创建一个新列,在其中添加与其生成编号对应的相同类型的数量,并将数据重塑为宽格式。看起来像;

Type    Generation 1    Generation 2      Generation 3
Grass        2               1                  1
Fire         2               0                  0

我从原始数据框中切出了列:

df_Type = df2[['Type 1', 'Generation']].copy()
print(df_Type)

我试图创建一个新列来计数,但这没有用。

Type_Generation = df_Type.groupby('Generation').agg(no_types = ('Type 1', 'sum'))
print(Type_Generation)

有没有更有效的方法来重塑数据?

【问题讨论】:

    标签: python pandas pivot


    【解决方案1】:

    crosstab

    pd.crosstab(df['Type'], df['Generation']).rename(columns=lambda x: f'Generation_{x}')
    

    结果:

    Generation  Generation_1    Generation_2    Generation_3
    Type            
    Fire        2               0               0
    Grass       2               1               1
    



    或者你可以使用add_prefix代替rename

    pd.crosstab(df['Type'], df['Generation']).add_prefix('Generation_')
    



    您可以通过reindex更改索引顺序

    pd.crosstab(df['Type'], df['Generation']).add_prefix('Generation_').reindex(df['Type'].unique())
    

    结果:

    Generation  Generation_1    Generation_2    Generation_3
    Type            
    Grass       2               1               1
    Fire        2               0               0
    

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 2018-04-29
      • 2018-03-29
      • 2015-07-18
      • 1970-01-01
      • 2020-07-27
      相关资源
      最近更新 更多