У меня есть эти данные:
df = pd.DataFrame({
"dim1": [ "aaa", "aaa", "aaa", "aaa", "aaa", "aaa" ],
"dim2": [ "xxx", "xxx", "xxx", "yyy", "yyy", "yyy" ],
"iter": [ 0, 1, 2, 0, 1, 2 ],
"value1": [ 100, 101, 99, 500, 490, 510 ],
"value2": [ 10000, 10100, 9900, 50000, 49000, 51000 ],
})
Затем я groupby
dim1/dim2 и из всех итераций выбираю значение1/значение2 для минимального значения1:
df = df.groupby(["dim1", "dim2"], group_keys=False) \
.apply(lambda x: x.sort_values("value1").head(1)).drop(columns=["iter"])
который возвращает:
dim1 dim2 value1 value2
aaa xxx 99 9900
aaa yyy 490 49000
Мой вопрос: как я могу добавить новый столбец, содержащий минимальное значение1 для группы dim1:
dim1 dim2 value1 value2 new_col
aaa xxx 99 9900 99
aaa yyy 490 49000 99
Я пробовал что-то вроде этого, что не сработало:
df["new_col"] = df.groupby(["dim1"], group_keys=False) \
.apply(lambda x: x.value1.head(1))
IIUC, после этого вы можете использовать .groupby
+ .transform
:
df["new_col"] = df.groupby("dim1")["value1"].transform("min")
print(df)
Отпечатки:
dim1 dim2 value1 value2 new_col
2 aaa xxx 99 9900 99
4 aaa yyy 490 49000 99