【问题标题】:Replace values in Pandas DataFrame with value based on headers将 Pandas DataFrame 中的值替换为基于标头的值
【发布时间】:2018-10-13 22:46:17
【问题描述】:

我有这个 Pandas 数据框

Index 1  2  3  4  5
    0 1  1  0  0  0

我想替换它:

Index 1     2
    0 pos1  pos2

我见过类似的问题,但使用“ix”,已弃用解决方案或仅用标题替换值

【问题讨论】:

  • 你能把替换规则解释清楚一点吗?如果5 列有1 怎么办?值是否只有 01?如果是数据框,最好提供多行示例数据并显示多行的预期输出。
  • 如果第 5 列有一个,那么第三列有 pos5
  • 这是数据框的子集,所以它总是只有一行

标签: python pandas dataframe


【解决方案1】:

一种选择是使用replaceadd_prefix

df.replace({k: 1 for k in df.columns}, 
           {k: v for k, v in zip(df.columns, df.add_prefix('pos').columns.values)})

或者,您可以使用apply 并将1 值替换为该条目的pos + .name 属性(在这种情况下相当于列名):

df.apply(lambda row: [f"pos{row.name}" if x == 1 else x for x in row], axis=0)

输出(两种方法):

          1     2  3  4  5
Index                     
0      pos1  pos2  0  0  0

数据:

df = pd.DataFrame([{'1': 1, '2': 1, '3': 0, '4': 0, '5': 0}]).rename_axis('Index')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-04
    • 2019-08-15
    • 2014-06-12
    • 2023-01-19
    • 2021-11-28
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多