如何在整个数据框/所有列上应用条件

How to apply a condition on the entire dataframe/ all columns

我有一个 14 行 × 1500 列的数据框,其中只包含数值。我想应用一个简单的条件,如果整个数据框中的任何值都超过某个数字,比如 25,则将这些值替换为 1,否则替换为 0。我找到了一些可以执行此类操作的解决方案,但我有指定列名,但我找不到任何可以在整个数据帧上执行一个条件的解决方案。

df[0.0] = df[0.0].apply(lambda x: 1 if x >=25 else 0)

这适用于特定列,但

df = df[:,:].apply(lambda x: 1 if x >=25 else 0)

不起作用。有人可以帮忙吗?

您可以使用 pandas.DataFrame.applymap 按照以下方式将函数应用于每个元素

import pandas as pd
df = pd.DataFrame({'col1':[0,10,100],'col2':[0,50,500]})
df2 = df.applymap(lambda x: 1 if x >=25 else 0)
print(df2)

输出

   col1  col2
0     0     0
1     0     1
2     1     1

在这种特殊情况下,您可能会 df2 其他方式,即

df2 = (df >= 25).astype(int)

它首先创建 pandas.DataFrame 个布尔值,然后将其转换为 ints(False0True1 )

applymap()关联的函数应用于给定DataFrame的所有元素,因此applymap()方法仅为DataFrame定义。 类似地,与apply()方法关联的函数可以应用于DataFrame或Series的所有元素,因此为Series和DataFrame对象定义了apply()方法。

只能为Pandas中的Series对象定义map()方法。

因此,您必须使用 applymap() 而不是 apply()

你可以试试

df = np.where(df >= 25, 1, 0)

这应该可以让您动态找到 x > 25 的位置并使用相同的列名设置新的

data = {
    'Column1' : [1, 26, 3, 27],
    'Column2' : [25, 26, 1, 1]
}

df = pd.DataFrame(data)
df_new = pd.DataFrame(np.where(df > 25, 1, 0), columns = df.columns)
df_new