迭代和lambda函数

2024-10-02 18:18:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将lambda函数应用于多个列,但我不确定如何循环遍历这些列。基本上,我有Column1-Column50,我希望在每个列上发生完全相同的事情,但是我不知道如何在下面的x.column中遍历它们。有办法吗?你知道吗

for column in df:
   df[column] = df.apply(lambda x: x.datacolumn * x.datacolumn2 if x.column >= x.datacolumn3, axis=1)

Tags: lambda函数indfforifcolumn事情
3条回答

首先,您缺少else分支(当if条件为False时该怎么办?),对于访问Panda的Series(lambda函数的输入)元素,可以使用索引。你知道吗

例如,设置为0,如果条件不成立:

for column in df:
    df[column] = df.apply(lambda x: x[0] * x[1] if x[0] >= x[2] else 0, axis=1)

你在找像map()这样的东西吗?map()将函数应用于列表(或其他iterable)中的每个项,并返回包含结果的列表。你知道吗

下面是an eloquent explanation它的工作原理(比我能写的要好得多)。你知道吗

然而,在某一点上,声明普通函数和/或使用for循环可能更容易。你知道吗

最简单的方法可能是将每一列提取为一个列表,执行操作,然后将结果写回dataframe。你知道吗

for column in df:
   temp = [x for x in df.loc[:, column]]      #pull a list out using loc
   if temp[0] > temp[2]:
       temp[0] = temp[0] * temp[1]
   df.loc[:, column] = temp                   #overwrite original df column

如果不满足上述条件,则数据保持不变。你知道吗

相关问题 更多 >