有没有办法使用pandas中的map函数将相似的行合并到它们自己的列中?

2024-05-15 16:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用pandas map函数将两行(描述)合并到一个新行中。新的一行是入室行窃,包括“入室行窃-住宅”和“入室行窃-非住宅”两行

df['Burglary'] = df['Burglary - Residence', 'Burglary - Non-Residence''].map()

我希望每一行都列出犯罪情况,并将合并的每一类的值相加

当前数据:

crime                        count         year
Burglary - Residence         21219         2013
Burglary - Non Residence     15946         2013
Bank Robbery                 92            2013
Holdup / Robbery             2907          2013

新数据:

crime          count      year
Burglary       37165      2013
Robbery        2999       2013

Tags: 数据函数mappandasdfcountyearnon
3条回答

我想你可以用numpy.where

result = df.assign(crime=np.where(df.crime.str.startswith('Burglary'), 'Burglary', df.crime))
print(result.groupby(['crime', 'year'], as_index=False).sum())

输出

              crime  year  count
0      Bank Robbery  2013     92
1          Burglary  2013  37165
2  Holdup / Robbery  2013   2907

注意assign的使用,这样就可以保留原始的数据帧

您可以创建映射的字典并将其传递到map

crime_map = {
    'Burglary - Residence': 'Burglary',
    'Burglary - Non Residence': 'Burglary',
    'Bank Robbery': 'Robbery',
    'Holdup / Robbery': 'Robbery'
}

df['crime'] = df.crime.map(crime_map)    
df = df.groupby(['crime', 'year'], as_index=False).sum()

df

Out: 
      crime  year  count
0  Burglary  2013  37165
1   Robbery  2013   2999

您可以使用:

g=df['crime'].str.contains('Burglary')
typ = { True:'Burglary', False:'Robbery'}
df1 = df.groupby([g,'year'])['count'].sum().reset_index()
df1.crime=df1.crime.map(typ)
print(df1)

输出

      crime     year    count
0   Robbery     2013    2999
1   Burglary    2013    37165

相关问题 更多 >