在python中切片列的值并计算平均值
我有一个包含三列的数据框架:在python中切片列的值并计算平均值,python,dataframe,time,slice,Python,Dataframe,Time,Slice,我有一个包含三列的数据框架: a b c 0 73 12 73 80 2 80 100 5 100 150 13 “a”和“b”中的值为天。我需要找到每30天间隔内“c”的平均值(30天内[min(a),max(b)]内的切片值,并计算c的平均值)。因此,我希望有这样一个数据帧: aa bb c_avg 0 30 12 30 60 12 60 90
a b c
0 73 12
73 80 2
80 100 5
100 150 13
“a”和“b”中的值为天。我需要找到每30天间隔内“c”的平均值(30天内[min(a),max(b)]内的切片值,并计算c的平均值)。因此,我希望有这样一个数据帧:
aa bb c_avg
0 30 12
30 60 12
60 90 6.33
90 120 9
120 150 13
另一个样本数据可以是:
a b c
0 1264.0 1629.0 0.000000
1 1629.0 1632.0 133.333333
6 1632.0 1699.0 0.000000
2 1699.0 1706.0 21.428571
7 1706.0 1723.0 0.000000
3 1723.0 1726.0 50.000000
8 1726.0 1890.0 0.000000
4 1890.0 1893.0 33.333333
1 1893.0 1994.0 0.000000
如何进入最终表?首先通过定义的范围
a
和b
列创建范围DataFrame
:
a = np.arange(0, 180, 30)
df1 = pd.DataFrame({'aa':a[:-1], 'bb':a[1:]})
#print (df1)
然后通过辅助列将所有行交叉连接到tmptmp
:
df3 = pd.merge(df1.assign(tmp=1), df.assign(tmp=1), on='tmp')
#print (df3)
最后一个过滤器-有两个按列过滤的解决方案:
df4 = df3[df3['aa'].between(df3['a'], df3['b']) | df3['bb'].between(df3['a'], df3['b'])]
print (df4)
aa bb tmp a b c
0 0 30 1 0 73 12
4 30 60 1 0 73 12
8 60 90 1 0 73 12
10 60 90 1 80 100 5
14 90 120 1 80 100 5
15 90 120 1 100 150 13
19 120 150 1 100 150 13
df4 = df4.groupby(['aa','bb'], as_index=False)['c'].mean()
print (df4)
aa bb c
0 0 30 12.0
1 30 60 12.0
2 60 90 8.5
3 90 120 9.0
4 120 150 13.0
首先通过定义的范围
a
和b
列创建范围DataFrame
:
a = np.arange(0, 180, 30)
df1 = pd.DataFrame({'aa':a[:-1], 'bb':a[1:]})
#print (df1)
然后通过辅助列将所有行交叉连接到tmptmp
:
df3 = pd.merge(df1.assign(tmp=1), df.assign(tmp=1), on='tmp')
#print (df3)
最后一个过滤器-有两个按列过滤的解决方案:
df4 = df3[df3['aa'].between(df3['a'], df3['b']) | df3['bb'].between(df3['a'], df3['b'])]
print (df4)
aa bb tmp a b c
0 0 30 1 0 73 12
4 30 60 1 0 73 12
8 60 90 1 0 73 12
10 60 90 1 80 100 5
14 90 120 1 80 100 5
15 90 120 1 100 150 13
19 120 150 1 100 150 13
df4 = df4.groupby(['aa','bb'], as_index=False)['c'].mean()
print (df4)
aa bb c
0 0 30 12.0
1 30 60 12.0
2 60 90 8.5
3 90 120 9.0
4 120 150 13.0
你能在你的问题陈述中更精确一点吗?我很乐意帮助你解决这个问题。我基本上需要从最小值(a)和最大值(b)之间的值创建新的时间间隔,当c在新的时间间隔内时,计算“c”的平均值。希望我能说得更清楚。请分享你的尝试(代码)。我根本无法解决这个问题!这就是为什么在这里。:-)你能在你的问题陈述中更精确一点吗?我很乐意帮助你解决这个问题。我基本上需要从最小值(a)和最大值(b)之间的值创建新的时间间隔,当c在新的时间间隔内时,计算“c”的平均值。希望我能说得更清楚。请分享你的尝试(代码)。我根本无法解决这个问题!这就是为什么在这里。:-)哎呀!我觉得这和我需要的有点不同。例如,第三行应该返回(12+2+5)/3,即6.3333,第四行应该返回(5+13)/2,即9,等等。可能我没有足够清楚地解释问题!:-/@geek2000-对不起,请给我一些时间。谢谢!这真是太棒了,在这些数据上效果非常好。但由于某些原因,我无法使它在我的原始数据上工作。当我得到df4时,所有的平均值都为零。我会玩它,并努力使它工作!但是如果你想不出来的话,会给你带来麻烦;-)再次感谢您的大力帮助@geek2000-没有数据的难题。但在我看来,如果列中的数值,
print(df.dtypes)
刚刚检查过,那么这是一个很好的测试。它们都是浮子!:-/我将编辑问题并添加一个原始数据样本。我不知道这为什么不起作用!哎呀!我觉得这和我需要的有点不同。例如,第三行应该返回(12+2+5)/3,即6.3333,第四行应该返回(5+13)/2,即9,等等。可能我没有足够清楚地解释问题!:-/@geek2000-对不起,请给我一些时间。谢谢!这真是太棒了,在这些数据上效果非常好。但由于某些原因,我无法使它在我的原始数据上工作。当我得到df4时,所有的平均值都为零。我会玩它,并努力使它工作!但是如果你想不出来的话,会给你带来麻烦;-)再次感谢您的大力帮助@geek2000-没有数据的难题。但在我看来,如果列中的数值,print(df.dtypes)
刚刚检查过,那么这是一个很好的测试。它们都是浮子!:-/我将编辑问题并添加一个原始数据样本。我不知道这为什么不起作用!