繁体   English   中英

pandas groupby with Multiindex:处理其他索引级别

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM