【问题标题】:KeyError: 'col' 'occured at index col' during apply function [duplicate]KeyError:'col''发生在索引col'在应用函数期间[重复]
【发布时间】:2023-03-05 19:10:01
【问题描述】:

我有以下数据集:

  target  |  date |  US_midi | UK_midi | NL_midi | BE_midi | FR_midi | SP_midi | PT_midi | SU_midi | COL_MIDI
    23       1970       1         0         0          0        0        0          0         0               0
    34       1970       0         0         1          0        0        0          0         0               0
    34       1970       0         1         1          0        0        0          0         0               0

目前COL_MIDI 的值设置为 0,但如果*_MIDI 列中的任何 列,US_midi 和 SU_midi 除外,我想将其更改为 1变量设置为1

因此,在示例中,最后 2 行将获得 1 用于 COL_MIDI 变量

为此我写了如下函数:

def col_checker(x):
    col_list = ['UK_midi', 'NL_midi', 'BE_midi', 'FR_midi', 'SP_midi', 'PT_midi']
    for nation in col_list:
        if x[nation] != 0:
            x['COL_MIDI'] = 1

我使用以下命令运行:

df['COL_MIDI'] = df.apply(col_checker)

然而每次我遇到以下错误(并且值保持在 0)

('UK_midi', 'occurred at index target')

我尝试重置索引(无效)并检查了两个数据框,并将数据框保存为 csv 以进行检查 - 但无法检测到任何异常。所有列的长度和所有内容都相同,所以我不确定索引是如何弄乱的,也不知道为什么它会阻止我的脚本运行。

有人知道我做错了什么吗?

【问题讨论】:

  • 您的df.apply( 中可能需要axis=1(未测试)
  • 成功了!感谢您的答复!我通常不会对整个数据框使用“应用”函数,所以我没有想到使用轴。

标签: python pandas


【解决方案1】:

这是实现您想要的更简单的方法

col_list = ['UK_midi', 'NL_midi', 'BE_midi', 'FR_midi', 'SP_midi', 'PT_midi']
df['COL_MIDI'] = (df[col_list].sum(axis=1) > 0) * 1

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2018-12-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多