【问题标题】:Pandas pivot table and merge column namesPandas 数据透视表和合并列名
【发布时间】:2022-07-26 22:04:16
【问题描述】:

事情是这样的,

我需要将长格式的表格转成宽格式。

例子:

d = {'col1': ['a','b', 'c', 'b', 'c', 'c'], 'col2': ['joe', 'mary', 'mary', 'joseph', 'allan', 'mary'], 
'col3':[2020, 2022, 2019, 2020, 2022, 2019], 'values':[123,235,3456,213,423,52]}
df = pd.DataFrame(data=d)
print(df)

我需要类似的东西

df = df.pivot(index=["col1"], columns=["col3", "col2"], values="values")

如果存在则生成此结构,如果不存在则为 null:

col1;2019_joe;2019_joe;2019_joe;2019_mary;2020_mary;2021_mary
一个
b
c
d
电子
f

但是命令 pivot() 不接受列关键字参数的列表。

【问题讨论】:

  • col1 包含重复值,如果您想将其用作索引,这将是一个问题。你确定你发布了正确的构造函数吗?

标签: python pandas pivot


【解决方案1】:

问题是你有两个相同的c mary 2019,在这种情况下,你可以试试pivot_table加上aggfunc参数

out = df.pivot_table(index=["col1"], columns=["col3", "col2"], values="values", aggfunc='mean')
out.columns = out.columns.map(lambda index: f'{index[0]}_{index[1]}')
print(out)

      2019_mary  2020_joe  2020_joseph  2022_allan  2022_mary
col1
a           NaN     123.0          NaN         NaN        NaN
b           NaN       NaN        213.0         NaN      235.0
c        1754.0       NaN          NaN       423.0        NaN

【讨论】:

    【解决方案2】:

    这会让你得到你期望的结果吗?

    df['col4'] = df['col3'].astype(str) + '_' + df['col2'].astype(str)
    df = df.drop(columns = ['col2', 'col3'])
    pd.pivot_table(df, index = 'col1', values = 'values', columns = 'col4').reset_index()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2014-09-01
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多