【问题标题】:Transforming a CSV from wide to long format将 CSV 从宽格式转换为长格式
【发布时间】:2018-01-31 13:54:39
【问题描述】:

我有一个这样的 csv:

col1,col2,col2_val,col3,col3_val
A,1,3,5,6
B,2,3,4,5

我想像这样传输这个 csv:

col1,col6,col7,col8
A,Col2,1,3
A,col3,5,6

有 col3 和 col3_val,所以我想将 col3 保存在 col6 中,将 col3 的值保存在 col7 中,并将 col3_val 的值保存在 col3 的值存储的同一行中。

【问题讨论】:

  • 完全不清楚您想要什么...另外请展示您尝试过的内容。
  • 我已经更新了问题。

标签: python pandas csv dataframe


【解决方案1】:

我想你要找的是df.meltdf.groupby

In [63]: df.rename(columns=lambda x: x.strip('_val')).melt('col1')\
           .groupby(['col1', 'variable'], as_index=False)['value'].apply(lambda x: pd.Series(x.values))\
           .add_prefix('value')\
           .reset_index()
Out[63]: 
  col1 variable  value0  value1
0    A     col2       1       3
1    A     col3       5       6
2    B     col2       2       3
3    B     col3       4       5

感谢 John Galt 以获得第二部分的帮助。

如果您想重命名列,请将上面的整个表达式分配给df_out,然后执行:

df_out.columns = ['col1', 'col6', 'col7', 'col8']

使用df.to_csv 保存它应该很简单。

【讨论】:

  • @KNp 已修复。现在怎么样了?
  • @KNp 假设熊猫版本相同,我认为是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
相关资源
最近更新 更多