【问题标题】:Apply Pandas Apply Lambda to Whole Dataset应用 Pandas 将 Lambda 应用到整个数据集
【发布时间】:2021-07-14 14:41:35
【问题描述】:

我想知道如何对整个数据框使用 pandas 应用功能。这是我的代码:

def apply_imputation(df, row):
    return df[df.index == row.donor_index]

df.apply(lambda row : apply_imputation(df, row) if row['imp_flag'] == 1 else row, axis=1)

我正在尝试传入行,并将这些行完全替换为来自不同索引(来自 row.donor_index)的行。谁能告诉我哪里出错了?

编辑3: 这是输入数据框的示例:

        lsoa11cd postcode_nospace  ... donor_possible_indexes  donor_index
8119   W01000209          LL208RQ  ...                    NaN          NaN
13707        NaN              NaN  ...                 [8119]       8119.0

我想要做的是:对于在donor_index 上有值的每一行,将整行替换为在donor_index 中指定的索引行。

这意味着第 13707 行应该被第 8119 行覆盖。相反,在应用上面的函数之后,我得到了:

                       lsoa11cd  ...                        donor_index
8119                  W01000209  ...                                NaN
13707  (l, s, o, a, 1, 1, c, d)  ...  (d, o, n, o, r, _, i, n, d, e, x)

如您所见,我们的目标行 13707 出现问题。谁能告诉我这里发生了什么?

【问题讨论】:

  • 你能分享你的数据集样本和你的预期输出吗?见minimal reproducible exampleHow to Ask
  • @Umar.H 我现在已经编辑了问题
  • 你能显示多于一行吗?我需要查看输入数据框中的两个索引。
  • 我再次编辑了问题以使其更清楚
  • 仍然没有输出示例?

标签: python pandas lambda apply


【解决方案1】:

df.apply 函数不会在您的数据框中替换,而是给您一个数据框。你应该把它写回你的数据框。

def apply_imputation(df, row):
    return df.loc[row.donor_index]

df = df.apply(lambda row : apply_imputation(df, row) if row['imp_flag'] == 1 else row, axis=1)

【讨论】:

  • 它不起作用 - 我得到了我在问题中提到的问题,每个单元格都被替换为列名,例如('c', 'o', 'l') 如果列名 = col
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 2016-09-22
  • 2018-03-27
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2020-01-02
  • 2021-05-27
相关资源
最近更新 更多