【问题标题】:calculate centroid of pandas series计算熊猫系列的质心
【发布时间】:2018-09-04 18:08:11
【问题描述】:

我有一个带有日期时间索引的熊猫系列(例如降水)。我想计算这个降水时间序列的质心(按值加权的日期时间的平均值)。我的问题是我不能将日期时间对象与浮点数相乘。 (不工作)的想法看起来像这样(输出应该是一个日期时间对象):

import pandas as pd
import datetime as dt
df = pd.DataFrame({'P':[1.2,10.1,5.6,0,0,0,0,0,3,4,6,4,8,2,0,0,0,0,0,0,0,0,0,0]}, index=[dt.datetime(2012,1,1,h) for h in range(24)])
P_sum = df['P'].sum()
prod = df.index * df['P']/P_sum
mean_date = prod.mean()

【问题讨论】:

  • 什么是P_tot?它来自哪里?
  • 对不起,这是 P_sum。改正了

标签: python pandas datetime indexing mean


【解决方案1】:

在计算产品之前尝试将日期时间转换为纪元时间戳(并将最终结果转换回日期时间)。我希望这会有所帮助。

import pandas as pd
import datetime as dt
df = pd.DataFrame({'P':[1.2,10.1,5.6,0,0,0,0,0,3,4,6,4,8,2,0,0,0,0,0,0,0,0,0,0]}, index=[dt.datetime(2012,1,1,h) for h in range(24)])
P_sum = df['P'].sum()
df["epoch"] = [float(t.strftime('%s')) for t in df.index]
prod = df["epoch"] * df['P'] / P_sum
mean_date = prod.mean()
print dt.datetime.fromtimestamp(mean_date).strftime('%Y-%m-%d %H:%M:%S')

更新:这可能是您正在寻找的:

import pandas as pd
import datetime as dt
df = pd.DataFrame({'P':[1.2,10.1,5.6,0,0,0,0,0,3,4,6,4,8,2,0,0,0,0,0,0,0,0,0,0]}, index=[dt.datetime(2012,1,1,h) for h in range(24)])
df["epoch"] = [float(t.strftime('%s')) for t in df.index]
mean_date = (df["epoch"] * df['P']).sum() / df['P'].sum()
print dt.datetime.fromtimestamp(mean_date).strftime('%Y-%m-%d %H:%M:%S')

输出:

2012-01-01 07:00:00

更新 2: 具有更好日期时间转换的代码(相同的输出):

import pandas as pd
import datetime as dt
df = pd.DataFrame({'P':[1.2,10.1,5.6,0,0,0,0,0,3,4,6,4,8,2,0,0,0,0,0,0,0,0,0,0]}, index=[dt.datetime(2012,1,1,h) for h in range(24)]
df["epoch"] = df.index.astype('int64')//1e9
mean_date = (df["epoch"] * df['P']).sum() / df['P'].sum()
print dt.datetime.fromtimestamp(mean_date).strftime('%Y-%m-%d %H:%M:%S')

【讨论】:

  • 关于质心,您可能需要重新考虑如何计算它。我认为这不会产生您正在寻找的结果。
  • 谢谢!我得到ValueError: Invalid format string df["epoch"] = [float(t.strftime('%s')) for t in df.index]
猜你喜欢
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
相关资源
最近更新 更多