以编程方式选择pd.melt的列

时间:2018-12-29 07:12:13

标签: python pandas

致力于自动化月度报告。试图找到一种替代方法,以在pandas融函数中手动在id_varsvalue_vars中输入列名称。是否可以通过编程方式做到这一点?

考虑一个带有a,b,c,'12 / 01/2018','12/02/2018','12/03/2018'等的df,其中a,b,c始终为{ {1}}和给定月份(在这种情况下为Dec)的每日日期是id_vars,不可取消。不用写

value_vars

是否可以以编程方式将value_vars分配给melt函数,以便每个月都可以使用相同的代码? (Jan可以取消设置31天,而Feb则需要28天)。

我不是pythonista,并且感谢您花费任何时间来帮助我。

3 个答案:

答案 0 :(得分:0)

如果使用IIUC,则只需要分开列即可。集合在这里非常有用且快速。当然,假设使用唯一的列名(应该如此):

id_vars = {'a', 'b', 'c'}
value_vars = set(df.columns) - id_vars
pd.melt(df, id_vars=id_vars, value_vars=value_vars)

答案 1 :(得分:0)

使用-

id_vars = ['a', 'b', 'c']
value_vars = df.columns.difference(id_vars)
pd.melt(df, id_vars=id_vars, value_vars=value_vars)

答案 2 :(得分:0)

您可以使用:

df.melt(['a','b','c'])

df.melt状态的文档字符串:

  

value_vars:元组,列表或ndarray,可选       要取消透视的列。如果未指定,则使用所有       未设置为id_vars

因此,您已将id_vars设置为第一个参数,所有其他列将用作每个文档的value_vars。