首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python熊猫为多个输出变量生成一个表。

Python熊猫为多个输出变量生成一个表。
EN

Stack Overflow用户
提问于 2021-11-20 20:08:36
回答 2查看 206关注 0票数 0

我有事故数据,其中部分数据包括事故发生年份、受伤程度和受伤者的年龄。这是DataFrame的一个例子:

代码语言:javascript
复制
df = pd.DataFrame({'Year': ['2010', '2010','2010','2010','2010','2011','2011','2011','2011'], 
                        'Degree_injury': ['no_injury', 'death', 'first_aid', 'minor_injury','disability','disability', 'disability', 'death','first_aid'],
                        'Age': [50,31,40,20,45,29,60,18,48]})

print(df)                   

我希望将三个输出变量按年龄小于40岁的年份分组,并统计残疾人数、死亡人数和轻伤人数。

输出应该类似于这个

当年龄< 40时,我生成了三个变量(num_disability、num_death、num_minor_injury),如下所示。

代码语言:javascript
复制
disability_filt = (df['Degree_injury'] =='disability') &\
                   (df['Age'] <40)
num_disability = df[disability_filt].groupby('Year')['Degree_injury'].count()
death_filt = (df['Degree_injury'] == 'death')& \
                    (df['Age'] <40)
num_death = df[death_filt].groupby('Year')['Degree_injury'].count()
minor_injury_filt = (df['Degree_injury'] == 'death') & \
                   (df['Age'] <40)
num_minor_injury = df[minor_injury_filt].groupby('Year')['Degree_injury'].count()

如何将这些变量组合在一个表中,如上表所示

提前谢谢你,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-20 20:22:21

在根据您的条件过滤行之后使用pivot_table

代码语言:javascript
复制
out = df[df['Age'].lt(40)].pivot_table(index='Year', columns='Degree_injury', 
                                       values='Age', aggfunc='count', fill_value=0)
print(out)

# Output:
Degree_injury  death  disability  minor_injury
Year                                          
2010               1           0             1
2011               1           1             0
票数 1
EN

Stack Overflow用户

发布于 2021-11-20 20:24:14

代码语言:javascript
复制
# prep data
df2 = df.loc[df.Age<40,].groupby("Year").Degree_injury.value_counts().to_frame().reset_index(level=0, inplace=False)
df2 = df2.rename(columns={'Degree_injury': 'Count'})
df2['Degree_injury'] = df2.index
df2
#                   Year    Count   Degree_injury
# death             2010    1       death
# minor_injury      2010    1       minor_injury
# death             2011    1       death
# disability        2011    1       disability

# pivot result
df2.pivot(index='Year',columns='Degree_injury')
#       death   disability  minor_injury
# Year          
# 2010  1.0     NaN         1.0
# 2011  1.0     1.0         NaN
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70049480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档