重命名pandas groupby对象的行索引

时间:2016-05-06 12:34:20

标签: python pandas

我有一个GroupBy对象,其行索引是整数。

light   worst_injury count
1       5            10217
2       5            4067
3       5            2142
4       5            1690
5       5            25848
6       5            734
9       5            18

我想重新命名行(而不是列!),以便'light'列包含特定的字符串:

light    worst_injury    count
Day             5        10217
Dawn            5        4067
Dusk            5        2142
Dark- lit       5        1690
Dark- unlit     5        25848
Other           5        734
Unknown         5        18

我有一个对应于每个数字['Day','Dawn'等]的字符串列表,但我不知道如何在GroupBy函数调用之前或期间将它们设置为索引。我也试过制作一个数据透视表,但出于同样的原因,似乎不可能这样做。

我想我可以编写一个脚本来将原始数据更改为这些字符串,而不是数字。这似乎是一种效率较低的方法,但如果在事实之前或之前无法更改groupby对象,我会对该选项持开放态度。

这是现有的代码;它按照光线和每个伤害等级对数据帧进行分组,然后计算:

df = pd.read_csv(filename, sep='|', usecols=['crash_deer_involv_assoc', 'worst_injury_in_accident', 'light', 'accident_month'])

for i in range(1,6):
    inj = df[(df['worst_injury_in_accident'] == i)] 
    grouped = inj.groupby(['light','worst_injury_in_accident'])
    grouped.agg('count')

1 个答案:

答案 0 :(得分:2)

IIUC您可以使用d字典#maybe first reset index df = df.reset_index() print df light worst_injury count 0 1 5 10217 1 2 5 4067 2 3 5 2142 3 4 5 1690 4 5 5 25848 5 6 5 734 6 9 5 18 d = {1:'Day',2:'Dawn', 3:'Dusk',4:'Dark- lit',5:'Dark- unlit',6:'Other',9:'Unknown'} df['light'] = df.light.map(d) print df light worst_injury count 0 Day 5 10217 1 Dawn 5 4067 2 Dusk 5 2142 3 Dark- lit 5 1690 4 Dark- unlit 5 25848 5 Other 5 734 6 Unknown 5 18

light

如果列indexprint df worst_injury count light 1 5 10217 2 5 4067 3 5 2142 4 5 1690 5 5 25848 6 5 734 9 5 18 d = {1:'Day',2:'Dawn', 3:'Dusk',4:'Dark- lit',5:'Dark- unlit',6:'Other',9:'Unknown'} df.index = df.index.to_series().map(d) print df worst_injury count light Day 5 10217 Dawn 5 4067 Dusk 5 2142 Dark- lit 5 1690 Dark- unlit 5 25848 Other 5 734 Unknown 5 18

as_index=False

编辑:

要进行汇总,您可以将参数DataFrame添加到map并致电groupby - 输出很不错print df.groupby(['light','worst_injury_in_accident'], as_index=False).count() count不需要:

as_index

另一种选择是使用reset_index(对我来说print df.groupby(['light','worst_injury_in_accident']).size().reset_index(name='count') 不起作用,因此您需要致电size

NaN

顺便说一句,reset_indexdifferences包含ViewModel个值,size没有。{/ p>