pandas 我想使用groupby,然后创建一个新列,在满足条件时从另一列取值

qyzbxkaa  于 2023-02-02  发布在  其他
关注(0)|答案(2)|浏览(177)

我有下面的 Dataframe ,我想创建一个新的列col2,如果col1中的值是BX,则在groupby ID之后从列value中取值。
以及另一个新列col3,如果来自“col1”的值是AX,则该列取来自value的值。

ID value col1
A    1    BX
A    2    AX
B    3    BX
B    4    AX
C    5    BX
C    6    AX

期望df

ID value col1  col2 col3
A    1    BX    1    2
A    2    AX    1    2
B    3    AX    4    3    
B    4    BX    4    3 
C    5    BX    5    6
C    6    AX    5    6
vlju58qv

vlju58qv1#

可以执行两种合并:一个是col1 = 'BX',另一个是col1 = 'AX'

df = df.merge(df.loc[df['col1'] == 'BX', ['ID', 'value']].rename({'value': 'col2'}, axis=1), on='ID')
df = df.merge(df.loc[df['col1'] == 'AX', ['ID', 'value']].rename({'value': 'col3'}, axis=1), on='ID')

输出:

ID  value col1  col2  col3
0  A      1   BX     1     2
1  A      2   AX     1     2
2  B      3   BX     3     4
3  B      4   AX     3     4
4  C      5   BX     5     6
5  C      6   AX     5     6
goucqfw6

goucqfw62#

假设axbx只能有一个值,请尝试使用pivotmergePivot将采用col1中的所有值,并为每个唯一值创建新列。合并时,col1中的所有唯一值将作为新列添加到new_df

p = df.pivot(index='ID', columns='col1', values='value')
new_df = df.merge(p, left_on='ID', right_index=True, how='left')

  ID  value col1  AX  BX
0  A      1   BX   2   1
1  A      2   AX   2   1
2  B      3   BX   4   3
3  B      4   AX   4   3
4  C      5   BX   6   5
5  C      6   AX   6   5

相关问题