Python 计算熊猫中数字列和非数字列的每日平均值
我有一个带有小时时间索引的数据帧:Python 计算熊猫中数字列和非数字列的每日平均值,python,pandas,Python,Pandas,我有一个带有小时时间索引的数据帧: wind_direction relative_humidity dates 2017-07-18 19:00:00 W 88 2017-07-18 20:00:00 N 88 2017-07
wind_direction relative_humidity
dates
2017-07-18 19:00:00 W 88
2017-07-18 20:00:00 N 88
2017-07-18 21:00:00 W 90
2017-07-18 22:00:00 S 91
2017-07-18 23:00:00 W 93
如何计算每日平均值,以便对数值列计算每日平均值,而对非数值列输出出现次数最多的值
--编辑:
我这样做:
df = df.resample('D').mean()
但是,这将返回一个错误选项1
from cytoolz.dicttoolz import merge
ncols = df.select_dtypes([np.number]).columns
ocols = df.columns.difference(ncols)
df.index = pd.to_datetime(df.index)
d = merge(
{c: 'mean' for c in ncols},
{c: lambda x: pd.value_counts(x).index[0] for c in ocols}
)
df.resample('D').agg(d)
relative_humidity wind_direction
dates
2017-07-18 90 W
df.index = pd.to_datetime(df.index)
g = df.resample('D')
g.mean().combine_first(g.agg(lambda x: pd.value_counts(x).index[0]))[df.columns]
relative_humidity wind_direction
dates
2017-07-18 90 W
选项2
from cytoolz.dicttoolz import merge
ncols = df.select_dtypes([np.number]).columns
ocols = df.columns.difference(ncols)
df.index = pd.to_datetime(df.index)
d = merge(
{c: 'mean' for c in ncols},
{c: lambda x: pd.value_counts(x).index[0] for c in ocols}
)
df.resample('D').agg(d)
relative_humidity wind_direction
dates
2017-07-18 90 W
df.index = pd.to_datetime(df.index)
g = df.resample('D')
g.mean().combine_first(g.agg(lambda x: pd.value_counts(x).index[0]))[df.columns]
relative_humidity wind_direction
dates
2017-07-18 90 W
选项1
from cytoolz.dicttoolz import merge
ncols = df.select_dtypes([np.number]).columns
ocols = df.columns.difference(ncols)
df.index = pd.to_datetime(df.index)
d = merge(
{c: 'mean' for c in ncols},
{c: lambda x: pd.value_counts(x).index[0] for c in ocols}
)
df.resample('D').agg(d)
relative_humidity wind_direction
dates
2017-07-18 90 W
df.index = pd.to_datetime(df.index)
g = df.resample('D')
g.mean().combine_first(g.agg(lambda x: pd.value_counts(x).index[0]))[df.columns]
relative_humidity wind_direction
dates
2017-07-18 90 W
选项2
from cytoolz.dicttoolz import merge
ncols = df.select_dtypes([np.number]).columns
ocols = df.columns.difference(ncols)
df.index = pd.to_datetime(df.index)
d = merge(
{c: 'mean' for c in ncols},
{c: lambda x: pd.value_counts(x).index[0] for c in ocols}
)
df.resample('D').agg(d)
relative_humidity wind_direction
dates
2017-07-18 90 W
df.index = pd.to_datetime(df.index)
g = df.resample('D')
g.mean().combine_first(g.agg(lambda x: pd.value_counts(x).index[0]))[df.columns]
relative_humidity wind_direction
dates
2017-07-18 90 W
如果您想计算多个列的每日统计数据,我认为分而治之可能是一个不错的选择 第一步是如何按日期进行聚合
df['dates'] = pd.to_datetime(df['dates'])
df['Date'] = df['dates'].apply(lambda dt: dt.date())
第二步是如何计算每天最频繁的方向
group1 = df.groupby(by=['Date'],as_index = False)['wind_direction'].agg(lambda dt:dt.value_counts(ascending=False).index[0])
第三步是如何计算日平均值,这与第二步类似
最后一步是在“日期”列中将它们合并在一起。然后您将收到所需的结果。如果您想计算多个列的每日统计数据,我认为分而治之可能是一个不错的选择 第一步是如何按日期进行聚合
df['dates'] = pd.to_datetime(df['dates'])
df['Date'] = df['dates'].apply(lambda dt: dt.date())
第二步是如何计算每天最频繁的方向
group1 = df.groupby(by=['Date'],as_index = False)['wind_direction'].agg(lambda dt:dt.value_counts(ascending=False).index[0])
第三步是如何计算日平均值,这与第二步类似
最后一步是在“日期”列中将它们合并在一起。然后您将收到您要查找的结果。使用
pandas.DataFrame.resample()
和适当的聚合函数。请说明您是如何尝试的far@MoinuddinQuadri,用我尝试过的代码更新。谢谢使用pandas.DataFrame.resample()
和适当的聚合函数。请说明您是如何尝试的far@MoinuddinQuadri,用我尝试过的代码更新。谢谢根据合并
采用*参数
而不是列表。但我可能错了——我有一段时间没有使用过toolz
和cytoolz
。你是对的。然而,它似乎是宽容的。我会更新。根据合并
获取*args
而不是列表。但我可能错了——我有一段时间没有使用过toolz
和cytoolz
。你是对的。然而,它似乎是宽容的。我会更新的。