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

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


我有一个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 (False0,True1)

你可以试试

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

这应该可以让你动态地找到x>

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

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

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

所以,你必须使用applymap()而不是apply()

最新更新