基于列函数的帧重采样

2024-10-03 06:32:21 发布

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

我有一个反复出现的问题,我有一些列是角度,而其他不是数据帧,我想重新采样这样的方式,平均值计算正确的每种类型。下面是一个小例子:

import pandas as pd
import numpy as np

def angleMean(x):
    d2r = np.pi/180.
    cosMean = np.mean(np.cos(x * d2r))
    sinMean = np.mean(np.sin(x * d2r))
    return np.arctan2(sinMean,cosMean) / d2r

# Define data fame
t = pd.date_range("00:00", "3:00", freq="30min")
df = pd.DataFrame({'t':t,'x':[350.,0.,2.,4.,6.,8.,10.],'theta':[350.,0.,2.,4.,6.,8.,10.]}).set_index('t')

# Using normal mean
print df.resample('1H').mean()

# Using angular mean
print df.resample('1H').apply(angleMean)

上面的示例显示了应用于所有列的任意一种类型的平均值以获得重采样

有没有一种好方法可以定义一个函数,它使用列名来确定要应用于每个列的正确平均值


Tags: import类型dfasnpmean平均值pd
1条回答
网友
1楼 · 发布于 2024-10-03 06:32:21

通过调用apply,可以将DataFrame的每一列作为Series对象传递给指定的函数。您可以通过.name属性获得序列的名称(即列名):

def conditionalMean(x):
  if x.name == 'theta':
    return angleMean(x)
  else:
    return x.mean()

print df.resample('1H').apply(conditionalMean)

相关问题 更多 >