Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算熊猫中数字列和非数字列的每日平均值_Python_Pandas - Fatal编程技术网

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
。你是对的。然而,它似乎是宽容的。我会更新的。