Разница одного элемента со всеми остальными элементами после группового - PullRequest
0 голосов
/ 04 мая 2020

У меня есть набор данных, как показано ниже:

Date	      Lon_s	lat_s	HLON_cv	HLAT_cv
1853-11-09	31	-10.4	293.85	5.2
1853-11-09	302.3	3.6	290.15	4.9
1853-12-01	85.5	-7.5	84.62	-6.88
1853-12-01	85.5	-7.5	78.2	-6.83
1853-12-01	88	-8.6	84.62	-6.88
1853-12-01	88	-8.6	78.2	-6.83
1853-12-01	86.6	-7.8	84.62	-6.88
1853-12-01	86.6	-7.8	78.2	-6.83

Для каждой даты я хочу взять один элемент из lon_s и иметь разницу со всеми другими значениями HLON. Например: для 1853-11-09: Ион 31 - Хлон 293,85 Ион 31 - Хлон 290,15 Ион 302,3-Хлон 293,85 Ион 302,3-Хлон 290,15 с соответствующим lat-HLAT.

Я использовал for group, values in df.groupby(df['Date']): для группировки даты, но мне нужна помощь для остальной части.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Пожалуйста, попробуйте следующий код и дайте мне знать, если он работает:

diff_df = pd.DataFrame()
for group, values in df.groupby(df['Date']):
      lat_diff = []; lon_diff = []
      for i in range(len(values['Lon_s'])):
         for j in range(len(values['HLON_cv']):
                lon_diff.append(values['Lon_s'].iloc[i] - values['HLON_cv'].iloc[j])

      for m in range(len(values['Lat_s'])):
         for n in range(len(values['HLAT_cv']):
                lat_diff.append(values['Lat_s'].iloc[m] - values['HLAT_cv'].iloc[n])
      df = pd.DataFrame({"date": group, "Lat_Diff": lat_diff, "Long_Diff":lon_diff})
      diff_df = diff_df.append(df)

Это должно создать для вас кадр данных в формате:

       Date   Lon_diff  Lat_diff
0  1853-11-09    -262.85    -15.60
1  1853-11-09    -259.15    -15.30
2  1853-12-01       0.88     -0.62
3  1853-12-01       7.30     -0.67
4  1853-12-01       0.88     -0.62
5  1853-12-01       7.30     -0.67
6  1853-12-01       0.88     -0.62
7  1853-12-01       7.30     -0.67
0 голосов
/ 04 мая 2020

Определите следующую функцию (с другой функцией внутри):

def myFun(grp):
    def myDiff(col1, col2):
        return col1.iloc[0] - col2
    return pd.DataFrame({'Lon_diff': myDiff(grp.Lon_s, grp.HLON_cv),
                         'Lat_diff': myDiff(grp.Lat_s, grp.HLAT_cv)})

Генерирует DataFrame, состоящий из 2 столбцов: Lon_diff и Lat_diff , каждый с соответствующая разница.

Затем присоедините результат применения этой функции к исходному кадру данных:

result = df.join(df.groupby('Date').apply(myFun))

Результат:

         Date  Lon_s  Lat_s  HLON_cv  HLAT_cv  Lon_diff  Lat_diff
0  1853-11-09   31.0  -10.4   293.85     5.20   -262.85    -15.60
1  1853-11-09  302.3    3.6   290.15     4.90   -259.15    -15.30
2  1853-12-01   85.5   -7.5    84.62    -6.88      0.88     -0.62
3  1853-12-01   85.5   -7.5    78.20    -6.83      7.30     -0.67
4  1853-12-01   88.0   -8.6    84.62    -6.88      0.88     -0.62
5  1853-12-01   88.0   -8.6    78.20    -6.83      7.30     -0.67
6  1853-12-01   86.6   -7.8    84.62    -6.88      0.88     -0.62
7  1853-12-01   86.6   -7.8    78.20    -6.83      7.30     -0.67
...