в настоящее время я перевожу некоторые сценарии R на Python. Но я борюсь со следующей строкой:
return(trackTable[, .(
AVERAGE_WIND_COMPONENT = sum(TRACK_WIND_COMPONENT*GROUND_DIST, na.rm = T)/sum(GROUND_DIST, na.rm = T) #PRÜFEN!!!!!
), by=KEY_COLUMN])
Теперь я попытался переписать код R на python:
table['temp'] = (table['track_wind_component'] * table['ground_dist']) / table['ground_dist']
AVERAGE_WIND_COMPONENT = table.groupby(['KEY_COLUMN'])['temp'].sum()
AVERAGE_WIND_COMPONENT = pd.DataFrame({'KEY_COLUMN':AVERAGE_WIND_COMPONENT.index, 'AVERAGE_WIND_COMPONENT':AVERAGE_WIND_COMPONENT.values})
Но мои результаты для AVERAGE_WIND_COMPONENT неверны ... Что я здесь неправильно перевел? Вероятно, это группа по мере того, как я строю свой временный столбец.
Пример df:
KEY_COLUMN track_wind_component ground_dist
0 xyz -0.000000 2.262407
1 xyz 0.000000 9.769840
2 xyz -135.378229 38.581616
3 xyz 11.971863 30.996997
4 xyz -78.208083 45.404430
5 xyz -88.718762 48.589553
6 xyz -118.302506 22.193426
7 xyz -71.033648 76.602917
8 xyz -68.369886 11.092901
9 xyz -65.706124 6.210328
10 xyz -60.822561 17.444752
11 xyz 39.630277 18.082869
12 xyz 102.477706 35.175366
13 xyz 43.061773 8.793499
14 xyz -71.036785 15.289568
15 xyz 65.246215 49.247986
16 xyz -29.249612 1.043781
17 xyz -25.848495 11.490416
18 xyz -11.223688 NaN
ожидаемый результат для этого KEY_COLUMN: -36.8273304
Код R правильный. мне это нужно, так как он переведен на python @Learningisamess
@Bernouy мы можем увидеть образец df и ожидаемый результат?
@ Крис, я отредактировал
@Bernouy, какие вычисления вы делаете, чтобы получить -12.5461..., я не знаком с r
Это то, о чем я спрашиваю ... я тоже не знаком с r .... данный код R вычисляет результат -12.5461644 для данного примера DF.
@Chris, извините, я опубликовал неправильный пример DF и неправильный результат. Теперь это должно быть правильно.
В коде Python / table['ground_dist'] выглядит странно. В коде R он делится на сумму






Хорошо, теперь ваш ожидаемый результат имеет смысл
Сначала создайте функцию, которая использует np.sum (), это эквивалент суммы R (значение, na.rm = T)
def my_agg(df):
names = {
'result': np.sum(df['track_wind_component'] * df['ground_dist']) / np.sum(df['ground_dist'])
}
return pd.Series(names, index=['result'])
df.groupby('KEY_COLUMN').apply(my_agg)
из:
result
KEY_COLUMN
xyz -36.827331
Что не так с вашим кодом:
table['temp'] = (table['track_wind_component'] * table['ground_dist']) / table['ground_dist']
# this is just creating a column that is the exact same as
# table['track_wind_component'] because, for example, (x*y)/y = x
AVERAGE_WIND_COMPONENT = table.groupby(['KEY_COLUMN'])['temp'].sum()
# you are now essentially just grouping and summing the track_wind_column
код R берет сумму (table['track_wind_component'] * table['ground_dist']), деленную на сумму (table['ground_dist'])
все, что сгруппировано по key_column
Код R также игнорирует значения NaN, поэтому я использовал np.sum().
Что-то не так, когда я запускаю ваш код ... в результате я получаю 2.373595 ... для каждого KEY_COLUMN один и тот же результат
@Bernouy позволь мне дважды проверить
@Bernouy Я не могу воспроизвести эту проблему.
Похоже, вам нужно среднее значение, так почему бы не использовать
meanвместоsumпосле агрегирования?