通过vlookup乘以熊猫数据框

时间:2019-11-22 13:35:18

标签: python pandas

我有一个非常大的数据框,其中包含多年的销售数据和成千上万的skew_id(即):

     date      skew_id  units_sold
0 2001-01-01      123       1
1 2001-01-02      123       2
2 2001-01-03      123       3
3 2001-01-01      456       4
4 2001-01-02      456       5
...

我还有另一个将skew_ids映射到skew_price(即)的数据框:

  skew_id  skew_price
0   123       100.00
1   456       10.00
...

我的第一个数据帧太大,以至于我无法在不达到内存限制的情况下进行合并。

我想计算每日收入(即):

    date       revenue
0 2001-01-01      140      
1 2001-01-02      250       
2 2001-01-03      300       
...

2 个答案:

答案 0 :(得分:1)

我认为这取决于行数,唯一skew_id值的数量和RAM的大小。

使用map的一种可能的解决方案:

df1['revenue'] = df1['skew_id'].map(df2.set_index('skew_id')['skew_price']) * df1['units_sold']

df2 = df1.groupby('date', as_index=False)['revenue'].sum()

答案 1 :(得分:0)

您可以通过groupby来实现:

df.groupby('date').apply(lambda gr: df2.loc[df2.skew_id.isin(list(gr.skew_id))]['skew_price'].sum())

或者,如果您遇到内存问题,可以自己遍历所有日期。这比较慢,但是可能需要更少的内存。

revenue = []
for d in df.date.unique():
    r = df2.loc[df2.skew_id.isin(list(df.loc[df.date == d].skew_id))]['skew_price'].sum()
    revenue.append({'date': d, 'revenue': r})
pd.DataFrame(revenue)