[英]pandas groupby with Multiindex: process other index levels
我有 dataframe 和 Multiindex,并尝试仅基于 Multiindex 数据创建新列。 例子:
df = pd.DataFrame(data = {'ticker': ['AAPL', 'AAPL', 'MSFT', 'MSFT'],
'date': [pd.Timestamp.now().floor('D') - pd.Timedelta(days = 1), pd.Timestamp.now().floor('D'),
pd.Timestamp.now().floor('D') - pd.Timedelta(days = 2), pd.Timestamp.now().floor('D') - pd.Timedelta(days = 1)],
'price': [100, 95, 200, 150]
}
).set_index(['ticker', 'date'])
df
# price
# ticker date
# AAPL 2022-10-09 100
# 2022-10-10 95
# MSFT 2022-10-08 200
# 2022-10-09 150
为每个代码分配具有最小日期的新列:
df['date_min'] = df.reset_index().groupby('ticker')['date'].transform(lambda x: x.min())
df
# price date_min
# ticker date
# AAPL 2022-10-09 100 NaT
# 2022-10-10 95 NaT
# MSFT 2022-10-08 200 NaT
# 2022-10-09 150 NaT
以某种方式未分配列值((
因为你reset_index
,你失去了索引 alignment 并且分配失败。
您可以使用底层 numpy 数组:
df['date_min'] = (df.reset_index()
.groupby('ticker', sort=False)['date']
.transform(lambda x: x.min())
.to_numpy()
)
output:
price date_min
ticker date
AAPL 2022-10-09 100 2022-10-09
2022-10-10 95 2022-10-09
MSFT 2022-10-08 200 2022-10-08
2022-10-09 150 2022-10-08
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.