Làm thế nào để tính trung bình hàng ngày từ trưa đến trưa với gấu trúc?


8

Tôi còn khá mới với trăn và gấu trúc, vì vậy tôi xin lỗi vì bất kỳ sự hiểu lầm nào trong tương lai.

Tôi có một DataFrame gấu trúc với các giá trị hàng giờ, trông giống như thế này:

2014-04-01 09:00:00 52.9    41.1    36.3

2014-04-01 10:00:00 56.4    41.6    70.8

2014-04-01 11:00:00 53.3    41.2    49.6

2014-04-01 12:00:00 50.4    39.5    36.6

2014-04-01 13:00:00 51.1    39.2    33.3

2016-11-30 16:00:00 16.0    13.5    36.6

2016-11-30 17:00:00 19.6    17.4    44.3

Bây giờ tôi cần tính giá trị trung bình 24h cho mỗi cột bắt đầu từ 2014-04-01 12:00 đến 2014-04 / 02 11:00 Vì vậy, tôi muốn tính trung bình hàng ngày từ trưa đến trưa.

Thật không may, tôi không biết làm thế nào để làm điều đó. Tôi đã đọc một số gợi ý để sử dụng nhóm, nhưng tôi thực sự không biết làm thế nào ...

Cảm ơn bạn rất nhiều trước! Bất kỳ trợ giúp được đánh giá cao !!

Câu trả lời:


7

Cuộc basecãi vã.

Một ngày là 24 giờ, vì vậy một căn cứ 12 sẽ bắt đầu nhóm từ trưa - trưa. Resample cung cấp cho bạn tất cả các ngày ở giữa, vì vậy bạn có thể .dropna(how='all')nếu bạn không cần cơ sở hoàn chỉnh. (Tôi giả sử bạn có một DatetimeIndex, nếu không, bạn có thể sử dụng onđối số của mẫu lại để chỉ định cột thời gian của mình.)

df.resample('24H', base=12).mean()
#df.groupby(pd.Grouper(level=0, base=12, freq='24H')).mean() # Equivalent 

                         1      2          3
0                                           
2014-03-31 12:00:00  54.20  41.30  52.233333
2014-04-01 12:00:00  50.75  39.35  34.950000
2014-04-02 12:00:00    NaN    NaN        NaN
2014-04-03 12:00:00    NaN    NaN        NaN
2014-04-04 12:00:00    NaN    NaN        NaN
...                    ...    ...        ...
2016-11-26 12:00:00    NaN    NaN        NaN
2016-11-27 12:00:00    NaN    NaN        NaN
2016-11-28 12:00:00    NaN    NaN        NaN
2016-11-29 12:00:00    NaN    NaN        NaN
2016-11-30 12:00:00  17.80  15.45  40.450000

không bao giờ khám phá cơ sở arg, cảm ơn vì điều đó :)
anky

Chắc chắn là một trong những đối số được sử dụng dưới mức. Có lẽ bởi vì việc thao túng bản thân thường đơn giản / rõ ràng hơn: D
ALollz

Cảm ơn bạn rất nhiều!! Hoạt động hoàn hảo!
NeedHelp

3

Bạn có thể trừ thời gian và nhóm của bạn:

df.groupby((df.index - pd.to_timedelta('12:00:00')).normalize()).mean()

0

Bạn có thể thay đổi giờ trong 12 giờ và lấy mẫu lại theo cấp độ ngày.

from io import StringIO
import pandas as pd

data = """
2014-04-01 09:00:00,52.9,41.1,36.3
2014-04-01 10:00:00,56.4,41.6,70.8
2014-04-01 11:00:00,53.3,41.2,49.6
2014-04-01 12:00:00,50.4,39.5,36.6
2014-04-01 13:00:00,51.1,39.2,33.3
2016-11-30 16:00:00,16.0,13.5,36.6
2016-11-30 17:00:00,19.6,17.4,44.3
"""

df = pd.read_csv(StringIO(data), sep=',', header=None, index_col=0)

df.index = pd.to_datetime(df.index)
# shift by 12 hours
df.index = df.index - pd.Timedelta(hours=12)
# resample and drop na rows
df.resample('D').mean().dropna()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.