1 回答

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
失敗的第一個(gè)原因是你的函數(shù)以 return df11.Volume.sum
(不帶括號(hào))結(jié)尾,因此你只返回sum函數(shù),而不是其執(zhí)行結(jié)果。
另一個(gè)原因是您可以將函數(shù)應(yīng)用于 Dataframe 的每一行,但必須傳遞axis=1參數(shù)。但是之后:
要應(yīng)用的函數(shù)應(yīng)該有一個(gè)參數(shù) - 當(dāng)前行,
其結(jié)果可以替換到所需的列下。
失敗的第三個(gè)原因是df2包含df1中不存在的日期,因此您不可能找到任何匹配的行。
如何獲得預(yù)期結(jié)果 - 方法1
首先,df2必須包含可能與df1匹配的值。我將df2定義為:
Ticker Date Price SumVol
0 AAPL 20200501 1.4 0
1 TSLA 20200502 2.3 0
然后我將你的功能更改為:
def VolSum(row):
df11 = pd.DataFrame(df1)
df11 = df11[df11['Ticker'] == row.Ticker]
df11 = df11[df11['Date'] == row.Date]
df11 = df11[df11['High'] < row.Price]
return df11.Volume.sum()
最后我生成的結(jié)果為:
df2['SumVol'] = df2.apply(VolSum, axis=1)
結(jié)果是:
Ticker Date Price SumVol
0 AAPL 20200501 1.4 250
1 TSLA 20200502 2.3 530
如何獲得預(yù)期結(jié)果——方法2
但更簡潔優(yōu)雅的方法是將求和函數(shù)定義為:
def VolSum2(row):
return df1.query('Ticker == @row.Ticker and '
'Date == @row.Date and High < @row.Price').Volume.sum()
并以同樣的方式應(yīng)用它:
df2['SumVol'] = df2.apply(VolSum2, axis=1)
結(jié)果當(dāng)然是一樣的。
添加回答
舉報(bào)