#python #pandas #numpy #dataframe #replace
#python #панды #numpy #фрейм данных #заменить
Вопрос:
Позвольте мне написать фрейм данных для объяснения моего вопроса:
Loc Length Size
A 5 50
A 10 90
A 8 0
B 20 140
B 5 50
B 12 0
Подумайте, что у меня есть такой фрейм данных. То, что я хочу сделать, это заменить значения размера, которые равны 0. Я хочу заменить эти значения, такие как:
Если размер в Loc A, то я хочу сделать (сумма размеров в A) / (сумма длин в A), кратная длине, и изменить это значение на ноль. Я хочу сделать это для всех значений размера, которые равны 0, и это зависит от sumSize / sumLength его местоположения и значения длины его строки.
Я пытался, но ничего не смог сделать. Пожалуйста, помогите мне в этом, спасибо!
Ответ №1:
IIUC groupby
Loc
для получения суммы, а затем map
результата:
s = df.loc[df["Size"].ne(0)].groupby("Loc").sum()
df.loc[df["Size"].eq(0), "Size"] = df["Loc"].map(s["Size"]/s["Length"])*df["Length"]
print (df)
Loc Length Size
0 A 5 50.000000
1 A 10 90.000000
2 A 8 74.666667
3 B 20 140.000000
4 B 5 50.000000
5 B 12 91.200000
Комментарии:
1. В функции map значение s[«Size»] / s[«Length»] равно (50 90 0 ) ? Я хочу (50 90) / (5 10) оцените это. Потому что у меня слишком много значений 0 в столбце Size в моем фрейме данных.
2. Если я сделаю s = df[«Size» != 0].groupby(«Loc»).sum(), это решит мою проблему?