我有两个非常大的DataFrame,它们的相关性如下。第一个DataFrameID
作为索引并指定Min
和Max
。第二个DataFrame每个都有一个分数和价格ID
。
对于每一个ID
,我想找到的平均价格的对应的,属于之间的恩怨max
和min scores
的那个ID
。
一个例子:
dt = [[1,3],[0,2],[1,3],[0,3],[1,4]]
df = pd.DataFrame(dt, columns = ['Min score','Max score'],index=[1,2,3,4,5])
dt_2 = [[1,1,10],[1,4,12],[1,3,20],[1,1,3],[2,3,2],[2,1,4],[3,1,7],[3,2,9],[3,2,3],[4,4,4],[4,2,3],[4,1,2],[5,1,1],[5,3,5],[5,5,5],[5,0,10]]
df_2 = pd.DataFrame(dt_2,columns = ['ID','score','price'])
我想要的输出是
ID Avg
1 11
2 4
3 6.33
4 2.5
5 3
例如,对于ID=1
,min score=1
和max score=3
,所以只有价格10,20和3个是相关的。这些平均值是11。
是否有内置的熊猫函数可以处理此问题?任何帮助表示赞赏。谢谢。
干得好:
df_3 = pd.merge(df_2, df, left_on="ID", right_index=True, how="left")
df_3[
(df_3.score >= df_3.loc[:, "Min score"]) & (df_3.score <= df_3.loc[:, "Max score"])
].groupby("ID").price.mean()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句