我有一个数据框,我想将一列转换为条件。
例如,这是一个示例数据框:
df=pd.DataFrame({'a':['>28','27','<26'],'b':['1','2','3']}) df a b 0 >28 1 1 27 2 2 <26 3
我想生成一系列 if 语句以获得理想的 b 值:
if a > 28: b=1 elif a=27: b=2 elif a < 26: b=3
我怎样才能做到这一点?在我的数据框中,所有元素都存储为字符串。
我正在尝试使用该iloc()功能进行选择,但它无法处理范围条件 ( >)
iloc()
>
如果有一种优雅的方法可以做到这一点?还是我必须手动输入所有条件?
您可以使用numpy库中的np.select()函数来实现条件转换。np.select()函数允许您基于给定的条件和相应的值选择和分配值。
numpy
np.select()
以下是如何在您的示例数据框中使用np.select()函数进行条件转换的示例代码:
import pandas as pd import numpy as np df = pd.DataFrame({'a': ['>28', '27', '<26'], 'b': ['1', '2', '3']}) conditions = [ df['a'].astype(str).str.startswith('>'), df['a'].astype(str) == '27', df['a'].astype(str).str.startswith('<') ] choices = [1, 2, 3] df['b'] = np.select(conditions, choices, default=df['b']) print(df)
输出:
a b 0 >28 1 1 27 2 2 <26 3
在上面的代码中,我们首先定义了条件列表conditions,其中每个条件是一个布尔值序列,用于检查每个元素是否满足相应的条件。接下来,我们定义了choices列表,其中包含与每个条件对应的值。最后,我们使用np.select()函数将条件应用于数据框的列a,并根据条件选择相应的值,并将结果赋给列b。
conditions
choices
a
b
注意,我们在应用条件之前使用.astype(str)将列a中的元素转换为字符串,以确保能够正确处理字符串形式的条件。此外,我们使用default=df['b']将默认值设置为原始的列b值,以防某些行不满足任何条件。
.astype(str)
default=df['b']
使用np.select()函数可以更简洁和优雅地处理条件转换,而不需要手动编写大量的if-elif-else语句。
if-elif-else