【问题标题】:Pivot table and merge column with headers数据透视表和合并列与标题
【发布时间】:2018-03-26 04:03:34
【问题描述】:

我的 DataFrame 如下:

 Ranges Relative_17-Sep Relative_17-Oct Relative_17-Nov
  <=20%  0.65            0.36            0.29
  >20%   99.35           99.64           99.71

我正在尝试找到一种方法将其转换为:

"Sep17<=20%" "Sep17>20%"   "Oct17<=20%" "Oct17>20%" "Nov17<=20%" "Nov17>20%"
 0.65          99.35        0.36            99.64     0.29        99.71

任何帮助。

谢谢

【问题讨论】:

  • 转置它们可能会有所帮助或使用索引提取它们并创建一个新的df,因为您的列名也不相同,所以最好创建一个新的df
  • 纯转置在这里不起作用,是的,我的想法与创建新 DF 并循环通过旧 DF 来创建新的一样,但希望有人有更好的优雅解决方案。

标签: python pandas dataframe pivot melt


【解决方案1】:

选项 1
melt

v = df.melt('Ranges')

df = pd.DataFrame(
    v['value'].values, 
    index=v['variable'].str.split('_').str[-1] + v['Ranges']
).T

df
   17-Sep<=20%  17-Sep>20%  17-Oct<=20%  17-Oct>20%  17-Nov<=20%  17-Nov>20%
0         0.65       99.35         0.36       99.64         0.29       99.71

选项 2
修改df.columns,后跟stacking 操作。

df.columns = df.columns.str.split('_').str[-1]
v = df.set_index('Ranges').stack()

df = pd.DataFrame(
    v.values, 
    index=v.index.get_level_values(1) + v.index.get_level_values(0)
).T

df
   17-Sep<=20%  17-Oct<=20%  17-Nov<=20%  17-Sep>20%  17-Oct>20%  17-Nov>20%
0         0.65         0.36         0.29       99.35       99.64       99.71

【讨论】:

  • 完美的@ColdSpeed,就像一个魅力。并感谢上面的更正
  • @RehanAzher 没问题!
  • 但是我的 17 不见了。 :) 我会设法找回它
  • @Aditya - 取决于你问谁... :)
  • 这就像拥有大量repo的人,他们统治,其余天真地跟随
猜你喜欢
  • 2022-07-26
  • 1970-01-01
  • 2014-09-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多