Я искал много, много других сообщений SO для ответа на этот вопрос, но не нашел совершенно того, что я ищу. Здесь идет:Как создать сводную таблицу уникальных значений?
Допустим, у нас есть dataframe который выглядит следующим образом:
In [7]: df.head(5)
Out[7]:
bool_flag group int_flag
0 False bottom 0
1 False mid 1
2 False top 1
3 False top 0
4 False high 1
Где есть пять уникальных групп, два уникальных булевы значения, а также два уникальных целочисленных значений. Я хотел бы создать сводную таблицу, как это:
bottom low mid high top
bool_flag true 5 32 2 12 4
false 2 42 7 2 10
int_flag 0 1 10 15 3 8
1 10 31 14 0 1
суммируя число уникальных значений каждого из столбцов, не являющихся group
и сгруппированы в столбцах group
.
Я подошел. Следующая команда pivot_table
получит мне таблицы, которые напоминают компоненты того, что я хотел бы иметь.
In [8]: pd.pivot_table(df.drop('bool_flag', axis=1), columns=['group'], index=['int_flag'], aggfunc=len)
Out[8]:
group bottom high low mid top
int_flag
0 15 11 8 13 13
1 12 5 8 9 6
In [9]: pd.pivot_table(df.drop('int_flag', axis=1), columns=['group'], index=['bool_flag'], aggfunc=len)
Out[9]:
group bottom high low mid top
bool_flag
False 19 14 15 18 16
True 8 2 1 4 3
Однако index
результирующей таблицы не Multiindex
Я хотел бы иметь, и, таким образом, делает конкатенации эту сводную таблицу с тем же для bool_flag
более сложной.
Я надеюсь, что есть способ либо использовать groupby
, либо pivot_table
, чтобы получить то, что я хочу, не создавая эти подтаблицы и не конкатенируя их, но до сих пор я не смог его найти. Поворотный с несколькими столбцами индекса приводит к слишком мелкозернистым таблицам (я не хочу, чтобы кол-(False, 0)
пара для (bool_flag, int_flag)
значений, например, только счет каждое уникального значения в пределах каждого group
.)
Я также попытался использовать groupby('group').agg(f)
, где я определил f
, чтобы получить результат звонка value_counts()
для каждой серии. Однако agg
несовместим с функциями, которые возвращают DataFrame
s.
Любые предложения были бы высоко оценены!
Кто-то спросил, есть ли 'df.groupby (['bool_flag', 'group', 'int_flag']). Size(). Unstack (1)' будет работать, но удалил их комментарий. К сожалению, это не сработало - обратите внимание, что значения не те, что я создал с примерами сводной таблицы. Я упомянул, что не хотел, чтобы подсчеты отображали уникальное значение _pairs_. Вместо этого мне просто нужна перекрестная закладка 'group' vs.' bool_flag' и 'group' vs.' int_flag', расположенных сверху друг на друга. – silver
Я сам не буду редактировать его, но я думаю, что более точным заголовком для вопроса может быть «как соединить/добавить две сводные таблицы с разными индексами» или что-то в этом роде, хотя этот конкретный заголовок может быть не очень улучшения. ;-) Самая сложная проблема здесь ИМО действительно имеет отношение к concat/добавлению индексов, которые не выстраиваются в линию, более того, чем создание единой сводной таблицы. – JohnE