Pandas 根据另一列将列值转换为不同的列

时间:2020-12-18 22:51:23

标签: python python-3.x pandas dataframe

说明:

我有一个包含两列 IDValue 的 Pandas 数据框。

我想对 ID 列进行分组

并根据总结果将分组结果(Value)转换为带有数字后缀Value1Value2Value3等的多列。

示例:

当前数据帧:

df = pd.DataFrame({'ID': ['A', 'A', 'A', 'B', 'C', 'C', 'D', 'E', 'F', 'F', 'F', 'F'], 'Value': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'] } )
df
   ID Value
0   A     A
1   A     B
2   A     C
3   B     D
4   C     E
5   C     F
6   D     G
7   E     H
8   F     I
9   F     J
10  F     K
11  F     L

预期数据帧:

  ID  Value1  Value2  Value3  Value4
0  A       A     B       C       NaN
1  B       D     NaN     NaN     NaN
2  C       E     F       NaN     NaN
3  D       G     NaN     NaN     NaN
4  E       H     NaN     NaN     NaN
5  F       I     J       K       L

我也使用数据透视表尝试了多种解决方案,但没有得到结果。

我的尝试

pd.pivot(df, index='ID', columns='ID', values='Value')

2 个答案:

答案 0 :(得分:4)

// Set up mocks and such

@Test
void doTest() throws Exception {

    final Service service = new Service(publisherMock, sensorRepositoryMock);
    final Sample sample = service.updateWeatherFeed().block();
    
    // Assert Sample
    assertEquals(sample, ...);

    // Verify mocks
    verify(publisherMock, times(1)).publish(sample);
    verify(sensorRepositoryMock, times(1)).insertSample(sample);
}

答案 1 :(得分:3)

您可以使用 MultiIndexgroupby.cumcount

创建合适的 unstack
df.set_index(['ID', df.groupby('ID').cumcount()]).unstack().add_prefix('Value').droplevel(0, 1).reset_index()

出:

  ID Value0 Value1 Value2 Value3
0  A      A      B      C    NaN
1  B      D    NaN    NaN    NaN
2  C      E      F    NaN    NaN
3  D      G    NaN    NaN    NaN
4  E      H    NaN    NaN    NaN
5  F      I      J      K      L
相关问题