我有一个熊猫数据框,其中有几列(20)和几行(16404)。一列是['age']。我希望能够按年龄类别绘制其他指标,例如['收入']。 例如:所有20岁以下的男性或20岁至40岁的女性的收入是多少。
我尝试过这种情况:
for i in range(len(df['age'])):
if df['age'][i]<25 and df['Gender'][i]==1:
df['group'][i]=1
但是出现以下错误:The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
能否请您告诉我如何根据这些条件将组分配给行?
所有系列都是int64
最佳
答案 0 :(得分:2)
(df['age'] < 25) & (df['Gender'] == 1)
解决,请注意,我使用的是&
而不是and
。执行此操作以获取布尔值
df['group'] = df['age'].lt(25) & df['Gender'].eq(1)
您可以通过多种方式将其转换为整数0
和1
df['group'] = df['group'].astype(int)
答案 1 :(得分:1)
cond_1 = df['age'] < 25
cond_2 = df['Gender'] == 1
df['group'] = np.where(cond_1 & cond_2, 1, 0)
它将在两个条件都满足的情况下分配1
,在其他任何地方都分配0
。
考虑到您的评论,此方法不必是二进制的。您可以根据需要包含任意数量的条件,并且可以用1
替换所需的任何int或str。此外,您可以将0
更改为np.nan
。
答案 2 :(得分:1)
您应该改用apply方法(请参见doc):
def your_function(row):
if row['age']<25 and row['Gender']==1:
return 1
else: return 0
df['group'] = df.apply(your_function,axis=1)