我在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())
答案 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);
}
}