Замена значений на основе других столбцов

#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(), это решит мою проблему?