将组分配给值

问题描述 投票:0回答:3

我有一个包含多个列(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

最好

python pandas dataframe
3个回答
2
投票
  1. 可以通过(df['age'] < 25) & (df['Gender'] == 1)解决模糊错误。请注意,我使用的是&而不是and
  2. 如果你这样做,你正在评估整个列并为每一行分配一个非常浪费的整列。

这样做是为了得到布尔

df['group'] = df['age'].lt(25) & df['Gender'].eq(1)

你可以通过多种方式将其转换为整数01

df['group'] = df['group'].astype(int)

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)

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

© www.soinside.com 2019 - 2024. All rights reserved.