我有一个熊猫数据栏,有3列:
Brand Model car_age
PEUGEOT 207 4. 6-8
BMW 3ER REIHE 2. 1-2
FIAT FIAT DOBLO 3. 3-5
PEUGEOT 207 1. 0
BMW 3ER REIHE 2. 1-2
PEUGEOT 308 2. 1-2
BMW 520D 2. 1-2
... ... ...我想按品牌和Model分组,计算每个car_age类别的计数:
Brand Model "1. 0" "2. 1-2" "3. 3-5" "4. 6-8"
PEUGEOT 207 1 0 0 1
PEUGEOT 308 0 1 0 0
BMW 3ER REIHE 0 2 0 0
BMW 520D 0 1 0 0
FIAT FIAT DOBLO 0 0 1 0PS:1. 0指的是与零车龄相对应的第一类。2. 1-2指的是与1-2岁之间的汽车年龄相对应的第二类.我枚举我的类别,以便它们以正确的顺序出现。
我试过了:
output_count = pd.DataFrame({'Count':df.groupby('Brand','Model','car_age').size()})但它忽略了一个错误:
ValueError:对象类型的无轴命名模型
有人能帮我解决这个问题吗?
我想我提供了足够的信息,但如果我能提供更多的信息,请告诉我。
发布于 2021-11-26 18:22:40
使用pd.crosstab
pd.crosstab([df['Brand'], df['Model']], df['car_age']).reset_index()输出:
car_age Brand Model 1. 0 2. 1-2 3. 3-5 4. 6-8
0 BMW 3ER REIHE 0 2 0 0
1 BMW 520D 0 1 0 0
2 FIAT FIAT DOBLO 0 0 1 0
3 PEUGEOT 207 1 0 0 1
4 PEUGEOT 308 0 1 0 0发布于 2021-11-26 17:52:59
用多列对数据帧进行分组的正确方法是在列名称周围使用方括号。
df.groupby(['Brand','Model','car_age'])我希望它能帮助你解决你的问题。
发布于 2021-11-26 19:15:44
这是一个你可以调用的函数。如果你想看看它是如何运作的
def group_by(df):
data_dumm = pd.get_dummies(df['car_age'])
data =df.drop(columns='car_age')
X= pd.concat([data,data_dumm], axis=1).groupby(['Brand','Model']).sum()
return X.reset_index()
group_by(df) 产出:
Brand Model 1. 0 2. 1-2 3. 3-5 4. 6-8
0 BMW 3ER REIHE 0 2 0 0
1 BMW 520D 0 1 0 0
2 FIAT FIAT DOBLO 0 0 1 0
3 PEUGEOT 207 1 0 0 1
4 PEUGEOT 308 0 1 0 0https://stackoverflow.com/questions/70128214
复制相似问题