在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)
然后通过辅助列将所有行交叉连接到tmp
tmp

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)
然后通过辅助列将所有行交叉连接到tmp
tmp

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)
刚刚检查过,那么这是一个很好的测试。它们都是浮子!:-/我将编辑问题并添加一个原始数据样本。我不知道这为什么不起作用!