Рассмотрим следующий код, который направлен на разделение колонки по его сгруппированных среднее:Панды группа по добавляет индекс
df = pd.DataFrame({'expenditure' : np.random.choice(['foo','bar'], n),
'groupid' : np.random.choice(['one','two'], n),
'coef' : np.random.randn(n)})
df.set_index('expenditure', inplace=True)
test = df.groupby(level=0).apply(lambda x: x['coef']/x.coef.mean())
Мне нравится эта структура данных перед apply
Инг, прежде чем я нахожусь обычно в состоянии только df['someNewColumn'] = df.apply(...)
. Но как ни странно, на этот раз я не могу мгновенно повторить результаты.
test
следует проиндексировать по индексам, которые произошли groupby
, expenditure
. Тем не менее, он имеет двойной индекс:
>>> test
expenditure expenditure
bar bar -0.491900
bar -9.332964
bar 8.019472
bar -4.540905
bar 5.627947
bar -0.171765
bar 5.698813
bar 6.476207
bar 8.796249
bar -8.284087
bar 1.426311
bar -1.223377
foo foo 1.900897
foo 7.057078
foo 0.060856
foo 3.850323
foo 2.928085
foo -3.249857
foo 3.176616
foo -1.433766
foo 0.910017
foo 1.395376
foo 1.898315
foo -1.903462
foo -3.590479
Name: coef, dtype: float64
Почему это двойной индекс, и как я могу получить мой нормализованной колонку?
>>> test.index
MultiIndex(levels=[[u'bar', u'foo'], [u'bar', u'foo']],
labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]],
names=[u'expenditure', u'expenditure'])
Моя pandas
версия 0.15.0
.
Копировавший неправильный код, извините. Обновлен вопрос. Я делаю почти то же самое, но я группирую «level = 0», что то же самое. Тем не менее я получаю вывод для 'test', который я перечислял выше. Не совсем ясно, как выглядит ваш вывод из-за '...'.Это похоже на мое? Если нет, какую версию 'pandas' вы используете? – FooBar
@FooBar, 'level = 0' даст тот же результат, что и выше, поскольку к моменту, когда вы выполняете' apply', у вас есть только 1 индекс. ** ... ** - это точно из результата, поскольку вы пытаетесь применить '.../x.coef.mean()' на уровне группы. Тем не менее, я думаю, что предложение Дж. Д. Лонга более вероятно, чего вы пытаетесь достичь. И моя версия pandas ** 0.14.1 ** – Anzel