【发布时间】:2018-03-23 06:35:29
【问题描述】:
我有一个如下所示的数据框:
df
Out[327]:
date store property_name property_value
0 2013-06-20 1 price 101
1 2013-06-20 2 price 201
2 2013-06-21 1 price 301
3 2013-06-21 2 price 401
4 2013-06-20 1 quantity 1000
5 2013-06-20 2 quantity 2000
6 2013-06-21 1 quantity 3000
7 2013-06-21 2 quantity 4000
我想计算每个日期、每个商店的收入,然后将其添加到数据框的底部。例如,对于 2014 年 6 月 20 日,对于商店#2:收入=201*2000 = 402000。
以下是我的代码,但我知道它对于较大的数据帧效率不高:
import pandas as pd
dates = df['date'].unique()
stores = df['store'].unique()
df_len = len(df)
for date in dates:
for store in stores:
mask_price = (df['date']==date) & (df['store']==store) & (df['property_name']=='price')
mask_quantity = (df['date']==date) & (df['store']==store) & (df['property_name']=='quantity')
price = df.loc[mask_price,'property_value'].iloc[0]
quantity = df.loc[mask_quantity,'property_value'].iloc[0]
df.loc[df_len,'date'] = date
df.loc[df_len,'store'] = store
df.loc[df_len,'property_name'] = 'revenue'
df.loc[df_len,'property_value'] = price*quantity
df_len=df_len+1
非常感谢您的帮助:)
【问题讨论】:
-
“帮助”意味着协作。你到底有什么尝试?
-
嗨,roganjosh,我刚刚尝试了一个 For 循环,我知道这不是很有效,因为我是 Pandas 的新手。我知道有更好的方法来做到这一点。
-
所以请展示你的低效方式,甚至是一个失败的
pandas尝试。到目前为止,我看到您提出的三个问题只是举手自己做,并要求 SO 为您做。你不能那样学习pandas。 -
我刚刚添加了代码。
标签: python pandas vectorization pandas-groupby