熊猫的滚动平均值

时间:2016-10-27 08:28:03

标签: python pandas dataframe group-by mean

我在Pandas中有这个初始DataFrame

                  A             B             C       D          E
    0               23       2015             1      14937     16.25
    1               23       2015             1      19054      7.50
    2               23       2015             2      14937     16.75
    3               23       2015             2      19054     17.25
    4               23       2015             3      14937     71.75
    5               23       2015             3      19054     15.00
    6               23       2015             4      14937     13.00
    7               23       2015             4      19054     37.75
    8               23       2015             5      14937      4.25
    9               23       2015             5      19054     18.25
    10              23       2015             6      14937     16.50
    11              23       2015             6      19054      1.00

如果我想获得这个结果,我怎么能这样做?

           A             B             C       D          E
0               23       2015             1      14937     NaN
1               23       2015             2      14937     NaN 
2               23       2015             2      14937     16.6
3               23       2015             1      14937     35.1
4               23       2015             2      14937     33.8
5               23       2015             3      14937     29.7
6               23       2015             4      14937     11.3
7               23       2015             4      19054     NaN
8               23       2015             5      19054     NaN
9               23       2015             5      19054     13.3
10              23       2015             6      19054     23.3
11              23       2015             6      19054     23.7
12              23       2015             6      19054     19.0

我尝试了一个GroupBy,但我没有得到它

DfMean = pd.DataFrame(DfGby.rolling(center=False,window=3)['E'].mean())

1 个答案:

答案 0 :(得分:2)

我认为您可以groupby使用rolling(至少需要pandas 0.18.1):

s = df.groupby('D').rolling(3)['E'].mean()
print (s)
D        
14937  0           NaN
       2           NaN
       4     34.916667
       6     33.833333
       8     29.666667
       10    11.250000
19054  1           NaN
       3           NaN
       5     13.250000
       7     23.333333
       9     23.666667
       11    19.000000
Name: E, dtype: float64

然后D df = df.set_index('D', append=True).swaplevel(0,1) df['E'] = s set_index匹配输出的相同顺序:

df = df.reset_index(level=0).sort_values(['D','C'])
df = df[['A','B','C','D','E']]

print (df)
     A     B  C      D          E
0   23  2015  1  14937        NaN
2   23  2015  2  14937        NaN
4   23  2015  3  14937  34.916667
6   23  2015  4  14937  33.833333
8   23  2015  5  14937  29.666667
10  23  2015  6  14937  11.250000
1   23  2015  1  19054        NaN
3   23  2015  2  19054        NaN
5   23  2015  3  19054  13.250000
7   23  2015  4  19054  23.333333
9   23  2015  5  19054  23.666667
11  23  2015  6  19054  19.000000

上次swaplevel并重新排序列:

import java.lang.*;
import java.io.*;

class Prime
{
    public static void main (String[] args) throws IOException
    {
        InputStreamReader reader = new InputStreamReader(System.in);
        BufferedReader nx = new BufferedReader(reader);

        int t; //t is the number of test cases
        int n1;
        int n2;// n1 and n2 and the smaller and larger number b/w which we      have to find all the primes

        System.out.println("Enter the number of test cases");
        t = Integer.parseInt(nx.readLine());

        if(t<=0)
        {
            return;
        }

        int i = 0;
        do
        {


            System.out.println("Enter the first number");
            n1 = Integer.parseInt(nx.readLine().trim());



            if(n1<0)
            {
                return;
            }

            if(n1<0)
            {
                return;
            }
            System.out.println("Enter the second number");
            n2 = Integer.parseInt(nx.readLine().trim());
            if(n2<0)
            {
                return;
            }


            int a;
            int b;


            for(a = n1; a <= n2; a++)
            {
                for(b = 2; b < a; b++)
                {
                    int quot = a%b;
                    if(quot == 0){
                        break;
                    }
                }
                if(a == b)
                {
                    System.out.println(" "+a);

                }
            }
            System.out.println();
            i++;
        }while(i < t);

    }
}