【问题标题】:Trouble averaging specific rows in Pandas DataFrame无法平均 Pandas DataFrame 中的特定行
【发布时间】:2015-08-03 09:33:13
【问题描述】:

我目前有以下两个DataFrame:

raw_data=

     Time                             F1         F2        F3
2082-05-03 00:00:59.961599999  -83.769997      29.430000      29.400000   
2082-05-03 00:02:00.009600000  -84.209999      28.940001      28.870001   
2082-05-03 00:02:59.971200000  -84.339996      28.280001      28.320000

outage_by_timeofday_num =(由 raw_data 制成)(忽略破折号 - 它们仅用于对齐)

                              F1     F2    F3  
Time                                                                        
2082-05-03 00:00:00           0      1     1   
2082-05-03 01:00:00           0      1     1  

我已经能够使用以下代码(如下)按一天中的时间对 raw_data 数据帧进行排序和平均,但我无法对 outage_by_timeofday_num 数据帧执行相同的操作:

这行得通:

raw_data = pd.read_excel(r'/Users/linnk ....
raw_data[u'Time']= pd.to_datetime(raw_data['Time'], unit='d')    
raw_data.set_index(pd.DatetimeIndex(raw_data[u'Time']), inplace=True) 
raw_data.Time = pd.to_datetime(raw_data.Time)

def time_cat(t):
    hour = t.hour
    if(hour >= 5 and hour < 9):
        return 'Morning (5AM-9AM)'
    elif(hour >= 9 and hour < 18):
        return 'Day (9AM-6PM)'
    elif(hour >= 18 and hour < 22):
        return 'Evening (6PM-10PM)'
    else:
        return 'Night (10PM-5AM)'

by_timeofday = raw_data.groupby(raw_data.Time.apply(time_cat)).mean()

by_timeofday 的输出是:

                        F1              F2             F3  
Time                                                                       
Day (9AM-6PM)         -47.301852      23.070963      22.981000   
Evening (6PM-10PM)    -50.033000      24.011667      23.921833   
Morning (5AM-9AM)     -62.481130      48.417866      48.537197   
Night (10PM-5AM)      -71.372613     -71.289763      53.957411 \

但这不起作用:

outage_by_hour_num.Time= pd.to_datetime(outage_by_hour_num.Time)
outage_by_timeofday = outage_by_hour_num.groupby(outage_by_hour_num.Time.apply(time_cat)).sum(axis=1, numeric_only=True)

这给出了错误:AttributeError: 'DataFrame' object has no attribute 'Time'

有人可以帮助我发现我的错误/我需要进行的编辑,以对我的 outage_by_timeofday_num 数据帧进行排序,就像我对 raw_data 进行排序一样? 如果它可能有用,outage_by_timeofday_num 已按以下方式制作:

ave_data = raw_data.resample('h', how='mean')
ave_data.index.name=u'Time'
summary_ave_data = ave_data.copy()
summary_ave_data['Hourly Substation Average'] = summary_ave_data.mean(numeric_only=True, axis=1)
outage_by_hour = summary_ave_data >= 0.05
outage_by_hour_num= outage_by_hour.astype(int) 

【问题讨论】:

    标签: python datetime pandas dataframe average


    【解决方案1】:

    您删除了ave_data.index.name=u'Time' 中的“时间”列。 更改为:

    ave_data.set_index('Time', drop=False, inplace=True)
    

    确保您将其设置为索引,但保留“时间”列。

    【讨论】:

    • 我尝试替换您指出的行并在其后插入您的建议,但都给了我以下错误(对于您建议的行):KeyError:'Time'。对这个或其他想法有什么想法吗?
    • 嗯看起来问题可能更早。尝试用raw_data.set_index('Time', drop=False, inplace=True)替换raw_data.set_index(pd.DatetimeIndex(raw_data[u'Time']), inplace=True)
    • 不幸的是,这也不起作用。如果我发送整个 Python 文件会有所帮助吗?如果您有任何其他想法,请告诉我
    • 当然,如果可能的话,请提供输入文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2016-01-08
    • 2020-11-14
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多