Python Pandas Pivot и значения карты
Допустим, у меня есть датафрейм со столбцами: id1, id2, valueType, value.
Сначала я хочу повернуть фрейм данных, чтобы добавить столбцы для различных возможных типов значений (valueType.unique()?). Затем для каждого значения я хочу отобразить его в правильный столбец valueType в строке с соответствующим id1, id2. Я полагаю, что мне также придется учитывать тот факт, что новые поворотные столбцы не обязательно будут одинаковыми по длине (то есть некоторые значения типа появляются чаще, чем другие), поэтому мне придется заполнять их с помощью NaN раньше. Какой лучший подход к этому? Я предполагаю, что я бы использовал pivot() и set_index() на кадре данных?
вход df
id1 id2 valuetype value
0 1 a height 5
1 1 a width 4
2 1 a length 3
3 1 b height 6
4 1 b width 5
5 1 c length 4
6 2 a height 3
7 2 a width 6
8 2 b height 7
9 2 b length 8
10 2 c height 9
11 2 c width 5
Ожидаемый результат
id1 id2 height length width
0 1 a 5.0 3.0 4.0
1 1 b 6.0 NaN 5.0
2 1 c NaN 4.0 NaN
3 2 a 3.0 NaN 6.0
4 2 b 7.0 8.0 NaN
5 2 c 9.0 NaN 5.0
1 ответ
Использование pivot_table
In [401]: (df.pivot_table(index=['id1', 'id2'], columns='valuetype', values='value')
.reset_index().rename_axis(None, 1))
Out[401]:
id1 id2 height length width
0 1 a 5.0 3.0 4.0
1 1 b 6.0 NaN 5.0
2 1 c NaN 4.0 NaN
3 2 a 3.0 NaN 6.0
4 2 b 7.0 8.0 NaN
5 2 c 9.0 NaN 5.0
Или используйте groupby
In [404]: (df.groupby(['id1', 'id2', 'valuetype'])['value'].sum().unstack()
.reset_index().rename_axis(None, 1))
Out[404]:
id1 id2 height length width
0 1 a 5.0 3.0 4.0
1 1 b 6.0 NaN 5.0
2 1 c NaN 4.0 NaN
3 2 a 3.0 NaN 6.0
4 2 b 7.0 8.0 NaN
5 2 c 9.0 NaN 5.0
Или используйте set_index
In [414]: (df.set_index(['id1', 'id2', 'valuetype'])['value'].unstack()
.reset_index().rename_axis(None, 1))
Out[414]:
id1 id2 height length width
0 1 a 5.0 3.0 4.0
1 1 b 6.0 NaN 5.0
2 1 c NaN 4.0 NaN
3 2 a 3.0 NaN 6.0
4 2 b 7.0 8.0 NaN
5 2 c 9.0 NaN 5.0