Использование pandas groupby на двух столбцах как создать новый столбец
У меня есть Dataset, который имеет много столбцов, и я хочу создать новый столбец на основе двух столбцов в этом наборе данных.
train_data[['CtpJobId', 'SegmentId']]
CtpJobId SegmentId
0 qa1-9epx-dk1 347772
1 qa1-9epx-dv1 347774
2 qa1-9epx-dv1 347777
3 qa1-9epx-dv1 347780
4 qa1-9epx-dv1 347783
5 qa1-9epx-dv1 347786
6 qa1-9epx-dv1 347789
7 qa1-9epx-dv1 347792
8 qa1-9epx-e01 347794
9 qa1-9epx-eb2 347795
10 qa1-9epx-ez1 347796
11 qa1-9epx-f32 347797
12 qa1-9epx-fi1 347798
Теперь я хочу создать новый столбец под названием numberOfSegment, например, если один и тот же jobId имеет несколько сегментов, а затем агрегировать этот сегмент и вставить эту сумму в этот новый столбец.
CtpJobId SegmentId numberOfSegment
0 qa1-9epx-dk1 347772 1
1 qa1-9epx-dv1 347774 7
2 qa1-9epx-dv1 347777 7
3 qa1-9epx-dv1 347780 7
4 qa1-9epx-dv1 347783 7
5 qa1-9epx-dv1 347786 7
6 qa1-9epx-dv1 347789 7
7 qa1-9epx-dv1 347792 7
8 qa1-9epx-e01 347794 1
9 qa1-9epx-eb2 347795 1
10 qa1-9epx-ez1 347796 1
11 qa1-9epx-f32 347797 1
Я поступил так, но это неправильно
train_data['NumberOfSegment'] = train_data.groupby('CtpJobId')['SegmentId'].sum()
train_data[['CtpJobId','NumberOfSegment']]
CtpJobId NumberOfSegment
0 qa1-9epx-dk1 NaN
1 qa1-9epx-dv1 NaN
2 qa1-9epx-dv1 NaN
3 qa1-9epx-dv1 NaN
4 qa1-9epx-dv1 NaN
5 qa1-9epx-dv1 NaN
6 qa1-9epx-dv1 NaN
7 qa1-9epx-dv1 NaN
8 qa1-9epx-e01 NaN
9 qa1-9epx-eb2 NaN
10 qa1-9epx-ez1 NaN
Может кто-нибудь помочь мне? Заранее спасибо
3 ответа:
Вам нужно использовать преобразование с
'count'
.train_data['NumberOfSegment'] = train_data.groupby('CtpJobId')['SegmentId'].transform('count')
Вывод:
CtpJobId SegmentId NumberOfSegment 0 qa1-9epx-dk1 347772 1 1 qa1-9epx-dv1 347774 7 2 qa1-9epx-dv1 347777 7 3 qa1-9epx-dv1 347780 7 4 qa1-9epx-dv1 347783 7 5 qa1-9epx-dv1 347786 7 6 qa1-9epx-dv1 347789 7 7 qa1-9epx-dv1 347792 7 8 qa1-9epx-e01 347794 1 9 qa1-9epx-eb2 347795 1 10 qa1-9epx-ez1 347796 1 11 qa1-9epx-f32 347797 1 12 qa1-9epx-fi1 347798 1
Вы также можете
map
Avalue_counts
привести к "CtpJobId":df['NumberOfSegment'] = df.CtpJobId.map(df.CtpJobId.value_counts()) df CtpJobId SegmentId NumberOfSegment 0 qa1-9epx-dk1 347772 1 1 qa1-9epx-dv1 347774 7 2 qa1-9epx-dv1 347777 7 3 qa1-9epx-dv1 347780 7 4 qa1-9epx-dv1 347783 7 5 qa1-9epx-dv1 347786 7 6 qa1-9epx-dv1 347789 7 7 qa1-9epx-dv1 347792 7 8 qa1-9epx-e01 347794 1 9 qa1-9epx-eb2 347795 1 10 qa1-9epx-ez1 347796 1 11 qa1-9epx-f32 347797 1 12 qa1-9epx-fi1 347798 1