2

2 つのデータフレームがあります。各行について、一致するものを検索し、対応する値を取得dfしたいと考えています。epoch_minute - lagaverage_hc

>>> df.head()
   epoch_minute  headcount
0      25640940          8
1      25640939          7
2      25640938          6
3      25640937         10
4      25640936         11
>>> avgs.head()
    epoch_minute  average_hc
0      25640940         7.8
1      25640939         8.5
2      25640938         9.2
3      25640937        10.0
4      25640936        10.1

この for ループはトリックを行います。

lag = []
for i,r in df.iterrows():
    l = avgs.loc[avgs['epoch_minute'] == (r['epoch_minute'] - day), 'average_hc'] 
    lag.append(l) if not l.empty else np.nan       
avgs['lag'] = pd.Series(lag).astype('float')

この正しい Series を生成しますlag

  epoch_minute  average_hc   lag  headcount
0      25640940         7.8  30.2        8.0
1      25640939         8.5  28.1        7.0
2      25640938         9.2  26.2        6.0
3      25640937        10.0  24.7       10.0
4      25640936        10.1  23.1       11.0

操作と同じロジックを試すとapply:

lag1 = df.apply(lambda r: avgs.loc[avgs['epoch_minute'] == (r['epoch_minute'] - day),
         'average_hc'], axis=1)
print(f"lag1.shape: {lag1.shape}\nlag1.head():\n{lag1.head()}")

私が期待していたシリーズの代わりに、この正しく評価されたが間違った形状のデータフレームが生成されます。

        1285  1286       1287       1288  1289  1290  1291  1292  1293  1294  ...   2655  2656  2657  2658  2659  2660  2661  2662  2663  2664
0  30.200001   NaN        NaN        NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...    NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
1        NaN  28.1        NaN        NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...    NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
2        NaN   NaN  26.299999        NaN   NaN   NaN   NaN   NaN   NaN   NaN  ...    NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
3        NaN   NaN        NaN  24.799999   NaN   NaN   NaN   NaN   NaN   NaN  ...    NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
4        NaN   NaN        NaN        NaN  23.1   NaN   NaN   NaN   NaN   NaN  ...    NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN

ナンを削除するか、によって返されるデータフレームを平坦化してapply、対角値のシリーズにする方法を教えてください。

4

1 に答える 1