Groupby之后一个元素与所有其他元素的差异

时间:2020-05-04 10:08:01

标签: python-3.x pandas pandas-groupby

我有一个数据集,如下所示:

import pandas as pd

df = pd.read_excel("Data.xlsx",sheet_name="EPI")
print (df)

对于每个日期,我想从lon_s中获取一个元素,并与HLON的所有其他值有所不同。 例如:对于1853-11-09:
lon 31- HLON 293.85
lon 31- HLON 290.15
lon 302.3-HLON 293.85
lon 302.3-HLON 290.15
以及相应的lat-HLAT。

我曾经使用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进行日期分组,但其余部分需要帮助。

2 个答案:

答案 0 :(得分:1)

请尝试以下代码,让我知道它是否有效:

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

答案 1 :(得分:0)

定义以下函数(内部包含另一个函数):

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: Lon_diff Lat_diff , 每个都有各自的区别。

然后将此函数的应用结果加入到原始DataFrame中:

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