根据列值的条件应用条件函数

  • 本文关键字:条件 应用 函数 python pandas
  • 更新时间 :
  • 英文 :


我有一个数据框架,我想对除第一列外的每一列应用一个简单的函数。以下面的例子为例—尽管实际上我的数据框架包含数百列:

vals = [(0, 12, 0),
(33, 0, 11),
(44, 16, 21),
(0, 32, 1),
(66, 33, 27),
(77, 0, 0)
]
df = pd.DataFrame(vals, columns=list('ABC'))

我想找到一种方法,我可以建立一个规则,每个大于0的值都被1取代。关键的是,我不想将此规则应用于第一列,它应该保持原样。

我得到的最接近的是一个lambda函数,它根本不工作:

df = df.apply(lambda x: 1 if x > 0 else 0 if x.name != 'A' else x)

当使用apply方法时,应用的函数将接收所有整个列(默认情况下,如果axis=0),或者它将接收整个行(axis=1)。在您的示例中,lambda函数是一个元素函数,这就是您需要使用applymap方法的原因。

df[['B', 'C']] = df[['B', 'C']].applymap(lambda x: 1 if x > 0 else 0)

你可以这样做:

>>> cols = ['B','C']
>>> df[cols] = df[cols].gt(0).astype(int)
>>> df
A  B  C
0   0  1  0
1  33  0  1
2  44  1  1
3   0  1  1
4  66  1  1
5  77  0  0

您可以将cols更改为df.columns[1:]之类的更一般的情况。

最新更新