Python轴和映射值

2024-04-25 04:53:48 发布

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

假设我有一个dataframe,它有以下列:id1,id2,valueType,value。你知道吗

首先,我想透视dataframe,为不同的可能值类型追加列(valueType.unique唯一() ?). 然后,对于每个值,我想将其映射到行中正确的valueType列中,并使用相应的id1、id2。我想我还必须考虑到这样一个事实,即新的数据透视列的长度不一定相等(即某些valueType出现的频率比其他类型高),因此我必须在前面用NaN填充它们。最好的方法是什么?我想我应该使用pivot()并在数据帧上设置\u 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

Tags: 数据方法类型dataframevaluenanwidthlength
1条回答
网友
1楼 · 发布于 2024-04-25 04:53:48

使用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

相关问题 更多 >