以日期为列的数据框中每月值的平均值

2024-09-28 01:25:44 发布

您现在位置:Python中文网/ 问答频道 /正文

谢谢你花时间帮我:)

我有如下数据帧(df_NSE_Price_):

Company Name                ID      2000-01-03 00:00:00 2000-01-04 00:00:00 ....
Reliance Industries Ltd.    100325  50.810              54.
Tata Consultancy Service    123455  123                 125
..

我希望输出如下所示:

Company Name                ID      March 00   April 00 .....
Reliance Industries Ltd    100325   52         55
Tata Consultancy Services  123455   124.3      124
..

输出数据必须具有每月数据的平均值

到目前为止我已经试过了

df_NSE_Price_.resample('M',axis=1).mean()

但这给了我错误 仅对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但获得了“Index”的实例


Tags: 数据nameiddfservice时间pricecompany
2条回答

首先,我将数据转换为一个数据帧(我还添加了一个包含二月信息的列)

import pandas as pd

columns = ('Company Name', 
           'ID', 
           '2000-01-03 00:00:00', 
           '2000-01-04 00:00:00', 
           '2000-02-04 00:00:00')

data = [('Reliance Industries Ltd.', 100325, 50.810, 54., 66.0),
        ('Tata Consultancy Service', 123455, 123, 125, 130.0),]

df = pd.DataFrame(data=data, columns=columns)

其次,我使用Company和ID创建了一个两级索引(MultiIndex)。然后,我将列标签转换为日期格式(使用.to_datetime()

df = df.set_index(['Company Name', 'ID'])
df.columns = pd.to_datetime(df.columns)

第三,我每月重新采样一次,使用“axis=1”按列聚合。这将为每列创建一个月。使用“to_period()”将月末日期转换为期间:

df = df.resample('M', axis=1).sum()
df.columns = df.columns.to_period('M')

                                 2000-01  2000-02
Company Name             ID                      
Reliance Industries Ltd. 100325   104.81     66.0
Tata Consultancy Service 123455   248.00    130.0

像这样的方法应该会奏效: df.transpose().resample('M',axis=1).mean().transpose()

相关问题 更多 >

    热门问题