【发布时间】:2017-07-11 23:05:28
【问题描述】:
我有一个下面给出的数据框示例。
hour minute value
0 0 10
0 5 20
0 10 30
0 15 50
0 20 10
0 25 55
1 0 55
1 5 50
1 10 10
1 15 20
1 20 30
1 25 40
1 30 50
.... 一天中的每一小时都是这样。我想将每小时和每分钟的平均标准偏差和倍数与该小时和分钟的实际值作为两个新列。所以最终的数据框如下所示。
所以对于 0 小时和 0 分钟,平均值是 mean(10,55) & stdev(10,55) 0 小时和 0 分钟的新列的值将是 mean(10,55)*10 & stdev(10,55)*10 并且 1 小时 0 分钟的新列的值将是 平均值(10,55)*55 & 标准差(10,55)*55 同样的方式它需要迭代所有小时和分钟并聚合
hour minute value mean*value stdev*value
0 0 10 325 318
0 5 20 700 424
1 0 55 1787 1750
1 5 50 1750 1060
目前,我首先按小时然后按分钟对行进行迭代,并计算对每个行的添加值。
for hour in df.hour:
for minute in df.minute:
trim_df = df.loc[(df[hour] == hour) & (df[minute] == minute)]
mean = trim_df [value].mean()
stdev = trim_df [value].std()
for index,row in trim_df.iterrows():
df.at[index, "mean*value"] = row["value"]*mean
df.at[index, "stdev*value"] = row["value"]*stdev
我的方法是花费大量时间我试图按功能使用 pandas,但无法转换此逻辑。
【问题讨论】:
-
你能展示一下你用 groupby 做了什么吗?您应该可以使用 groupby 和 transform 来做到这一点
-
没什么具体的我是熊猫组的新手
-
@D14 我不确定我是否理解 - 您的初始数据帧在(小时,分钟)对上已经是唯一的。您将如何将它们的平均值乘以该小时的值 - 在您的示例中,0 小时有 6 个可能的值,您将如何选择使用哪一个?
-
@Stael 是对的,你想要一小时的平均值还是一分钟的平均值?
-
我只给出了 2 小时的实际数据帧是 24 小时,因此每 0.5 分钟会有 24 个值。这 24 个值的平均意志,然后与这些分钟的实际相乘。希望我能澄清