[英]Multiply pandas dataframe by vlookup
我有一个非常大的 dataframe 有多年的销售数据和数万个 skew_ids(即):
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
...
我有另一个 dataframe 将 skew_ids 映射到 skew_price (即):
skew_id skew_price
0 123 100.00
1 456 10.00
...
我的第一个 dataframe 太大了,如果不达到 memory 限制,我就无法合并。
我想计算每日收入(即):
date revenue
0 2001-01-01 140
1 2001-01-02 250
2 2001-01-03 300
...
我认为这取决于行数、唯一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()
您可以通过 groupby 实现此目的:
df.groupby('date').apply(lambda gr: df2.loc[df2.skew_id.isin(list(gr.skew_id))]['skew_price'].sum())
或者,如果您遇到 memory 问题,您可以自己遍历所有日期。 这较慢,但可能需要较少的 memory。
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.