我有一个这样的DataFrame:
import pandas as pd
df = pd.DataFrame(columns=list('ABC'))
df[A] = [22, 43, 64, 86]另外,我希望使用比较运算符填充其他两列。以下是我所拥有的:
if df['A'] <= 25:
df['B'] = 'k'
df['C'] = 'k'
elif df['A'] > 25 & df['A'] <= 50:
df['B'] = 'b'
df['C'] = 'none'
elif df['A'] > 50
df['B'] = 'g'
df['C'] = 'r'但是,我很难在DataFrame上使用操作符。我得到了一个错误,比如"ValueError:系列的真值不明确“。有人知道解决办法吗?
编辑:考虑到将来非常大的elif的潜力,我想继续使用DataFrames。每次使用新的比较运算符时,我都试图避免在DataFrame中搜索。
发布于 2019-07-25 18:42:47
方法1
pd.cut的完美用例
df['B'] = pd.cut(df['A'], [0,25,50,np.inf], labels=['k', 'b', 'g'])
df['C'] = pd.cut(df['A'], [0,25,50,np.inf], labels=['k', 'None', 'g'])输出
A B C
0 22 k k
1 43 b None
2 64 g g
3 86 g g方法2
由于我们有一组条件,这也是np.select的一个很好的用例。
conditions = [
df['A'] <= 25,
(df['A'] > 25) & (df['A'] <= 50),
df['A'] > 50
]
choices1 = ['k', 'b', 'g']
choices2 = ['k', 'None', 'g']
df['B'] = np.select(conditions, choices1, default='unknown')
df['C'] = np.select(conditions, choices2, default='unknown')输出
A B C
0 22 k k
1 43 b None
2 64 g g
3 86 g ghttps://stackoverflow.com/questions/57208232
复制相似问题