У меня есть df, как это,

df = pd.DataFrame({
    "Name" : ["A","B","C","D","E","F","G"],
    "part number" : ["1","3","2","1","5","1","2"],
    "detail1" : ["A","C","B","B","E","E","E"],
    "detail2" : ["one","three","two","two","five","five","five"]
})


df
Name    part number detail1 detail2
A           1           A   one
B           3           C   three
C           2           B   two
D           1           B   two
E           5           E   five
F           1           E   five
G           2           E   five

Я хотел бы сгруппировать по номеру детали и заполнить деталь1 и деталь2 значениями первой строки.

Мой ожидаемый результат,

Name    part number detail1 detail2
A       1           A       one
B       3           C       three
C       2           B       two
D       1           A       one
E       5           E       five
F       1           A       one
G       2           B       two

Я попробовал, df.groupby("part number")[["detail1","detail2"]].first(), но не дал ожидаемого результата, пожалуйста, помогите.

2
pyd 24 Июл 2020 в 08:24

1 ответ

Лучший ответ

Используйте groupby на part number и преобразуйте столбец detail1, detail2 используя first и назначьте эти преобразованные столбцы обратно в df:

cols = ['detail1', 'detail2']
df[cols] = df.groupby('part number')[cols].transform('first')

Результат:

print(df)
  Name part number detail1 detail2
0    A           1       A     one
1    B           3       C   three
2    C           2       B     two
3    D           1       A     one
4    E           5       E    five
5    F           1       A     one
6    G           2       B     two
4
Shubham Sharma 24 Июл 2020 в 05:29