我有一个DataFrame,看起来像这样:
构建它的代码是:
data = {'Position Date': ['2022-01-02', '2022-01-02', '2022-01-02', '2022-01-02', '2022-01-03', '2022-01-03', '2022-01-03', '2022-01-03'],
'Client': ['Client 1', 'Client 1', 'Client 2', 'Client 2', 'Client 1', 'Client 1', 'Client 2', 'Client 2'],
'Product': ['Product 1', 'Product 4', 'Product 2', 'Product 3', Product 1', 'Product 4', 'Product 2', 'Product 3'],
'Buy Date': ['2022-05-02', '2022-06-02', '2022-03-12', '2022-01-25', '2022-05-02', '2022-06-02', '2022-03-12', '2022-01-25'],
'Position': [130, 5000, 120, 77, 150, 7000, 200, 100]}
df = pd.DataFrame(data).set_index(['Position Date', 'Client', 'Product', 'Buy Date'])
df['PL'] = df.groupby(level=['Client', 'Product', 'Buy Date']).diff().fillna(0)
因此,现在我需要创建一个新的列X,它将"当前日期" PL(索引0)除以最后一天的Position(索引-1)。
例如:在2022年1月3日,客户端1,产品1,x将为:
X = PL [索引0 ]/位置[-1]= 20/130
预期产出为:
由于第一天的值为0,其他值为:第20/130号、第2000/5000号、第80/120号、第23/77号决议
我试着像这样
df.groupby(level=['Client', 'Product', 'Buy Date']).apply(lambda x: x['PL'] / x['Position'].iloc[-1])
但我总是出错。
2条答案
按热度按时间yqkkidmi1#
我会在这里使用索引:
输出:
中间体:
w1e3prcc2#
其中,
shift
方法中的4是Position Date
列中一天内的产品总数(产品1、产品2、产品3和产品4