我有一个包含多个列(20)和行(16404)的pandas数据帧。一列是['年龄']。我希望能够在一个年龄段上绘制其他指标,例如['收入']。例如: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
最好
(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)
你应该使用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)
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
。