【问题标题】:How do I use the pandas.melt function to unpivot a few columns while keeping the rest intact如何使用 pandas.melt 函数取消旋转几列,同时保持其余列不变
【发布时间】:2019-07-26 05:49:22
【问题描述】:

我正在使用一个有 66 列的数据库,我希望使用 python pandas.melt 函数仅取消旋转 3 列。

df = pd.melt(df,value_vars=["RFR 1","RFR 2","RFR 3"],var_name="RFR Index",value_name="RFR Mode")

我发现所有其他列都被删除了,除非我将它们设置为id_vars。如何在不列出所有内容的情况下保留所有内容? (因为有这么多)

【问题讨论】:

  • 这里不需要示例代码或预期的输出,这个问题足够通用和清晰,可以在没有这些的情况下回答。添加示例数据不会向上下文或答案添加任何内容。

标签: python python-3.x pandas


【解决方案1】:

IIUC,您可以使用pandas.Index.difference 来获取您的数据框中所有不在您指定列表中的列。

有点荒谬的例子,但是:

df = pd.DataFrame(data=np.random.randn(5,10),
                  columns=['a','b','c','d','e','f','g','h','i','j'])

val_vars = ['e','f','g']
other_vars = df.columns.difference(val_vars)

df.melt(id_vars=other_vars, value_vars=val_vars)

不使用 pandas 特定功能的另一种方法是使用集合:

other_vars = set(df.columns) - set(val_vars)

【讨论】:

    【解决方案2】:

    只需创建不包含value_vars 中的列的列表

    value_vars = ["RFR 1","RFR 2","RFR 3"]
    id_vars = [x for x in df.columns if x not in value_vars]
    df = pd.melt(df,value_vars=value_vars,var_name="RFR Index",value_name="RFR Mode", id_vars=id_vars)
    

    【讨论】:

    • 这也很有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2016-08-11
    • 1970-01-01
    相关资源
    最近更新 更多