【问题标题】:pandas dataframe melt with string values熊猫数据框与字符串值融为一体
【发布时间】:2017-09-14 13:51:45
【问题描述】:

我有一个看起来像这样的数据框

brand|1 |2 |3
---------------
a    |a1|a2|a3
b    |b1|b2|b3

我希望结果数据框看起来像这样

brand|rank|value
----------------
a    |1   |a1
a    |2   |a2
a    |3   |a3
b    |1   |b1
b    |2   |b2
b    |3   |b3

我尝试过 pandas 的融化功能,但它对我不起作用,因为 a1、a2、···b3 都是字符而不是数字。 我想知道如何在 python 中做到这一点。

【问题讨论】:

  • 显示你的尝试。
  • 作为对回答您问题的人的礼貌,发布一个初始化您的测试数据框的 sn-p。

标签: python pandas dataframe melt


【解决方案1】:
#Create example dataframe
a = {'a':['a1','a2','a3'],'b':['b1','b2','b3']}
df = pd.DataFrame.from_dict(a)
df = df.T
df = df.reset_index()
df.columns = ['brand','1','2','3']

要按照您的演示进行转换,请尝试:

pd.melt(df, id_vars =['brand'])

【讨论】:

    【解决方案2】:

    1) 使用set_indexstack

    In [429]: (df.set_index('brand').stack()
                 .reset_index(name='value')
                 .rename(columns={'level_1': 'rank'}))
    Out[429]:
      brand rank value
    0     a    1    a1
    1     a    2    a2
    2     a    3    a3
    3     b    1    b1
    4     b    2    b2
    5     b    3    b3
    

    2) 使用melt

    In [430]: df.melt(id_vars=['brand'], var_name='rank')
    Out[430]:
      brand rank value
    0     a    1    a1
    1     b    1    b1
    2     a    2    a2
    3     b    2    b2
    4     a    3    a3
    5     b    3    b3
    

    【讨论】:

      猜你喜欢
      • 2018-06-21
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多