Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 在groupby和滚动列之后向dataframe添加新列_Pandas - Fatal编程技术网

Pandas 在groupby和滚动列之后向dataframe添加新列

Pandas 在groupby和滚动列之后向dataframe添加新列,pandas,Pandas,我试图在groupby和rolling average之后向pandas dataframe添加一个新列,但在重置索引之后,新生成的列的顺序发生了变化 原始数据帧 Name Values 0 A 1 1 A 2 2 A 3 3 B 1 4 B 2 5 C 3 6 A 2 7 A 6 8 B 8 9 B 3 10 D 0 在groupby和rolling之后,它看起来像: Name A 0

我试图在groupby和rolling average之后向pandas dataframe添加一个新列,但在重置索引之后,新生成的列的顺序发生了变化

原始数据帧

Name    Values
0   A   1
1   A   2
2   A   3
3   B   1
4   B   2
5   C   3
6   A   2
7   A   6
8   B   8
9   B   3
10  D   0
在groupby和rolling之后,它看起来像:

Name    
A     0          NaN
      1          NaN
      2     2.000000
      6     2.333333
      7     3.666667
B     3          NaN
      4          NaN
      8     3.666667
      9     4.333333
C     5          NaN
D     10         NaN
Name: Values, dtype: float64
现在有人能帮我把这个结果添加到原始数据框的新列中吗?因为当我尝试重置索引时,顺序会更改为groupby顺序。

以下是一个示例:

df = pd.DataFrame({'Name': {0: 'A',
  1: 'A',
  2: 'A',
  3: 'B',
  4: 'B',
  5: 'C',
  6: 'A',
  7: 'A',
  8: 'B',
  9: 'B',
  10: 'D'},
 'Values': {0: 1, 1: 2, 2: 3, 3: 1, 4: 2, 5: 3, 6: 2, 7: 6, 8: 8, 9: 3, 10: 0}})

df2 = pd.DataFrame({2: {('A', 0): np.nan,
  ('A', 1): np.nan,
  ('A', 2): 2.0,
  ('A', 6): 2.333333,
  ('A', 7): 3.666667,
  ('B', 3): np.nan,
  ('B', 4): np.nan,
  ('B', 8): 3.666667,
  ('B', 9): 4.3333330000000005,
  ('C', 5): np.nan,
  ('D', 10): np.nan}})

df.merge(df2.reset_index(level=0), left_index=True, right_index=True)


   Name  Values  0         2
0     A       1  A       NaN
1     A       2  A       NaN
2     A       3  A  2.000000
3     B       1  B       NaN
4     B       2  B       NaN
5     C       3  C       NaN
6     A       2  A  2.333333
7     A       6  A  3.666667
8     B       8  B  3.666667
9     B       3  B  4.333333
10    D       0  D       NaN
或加入:

以下是一个例子:

df = pd.DataFrame({'Name': {0: 'A',
  1: 'A',
  2: 'A',
  3: 'B',
  4: 'B',
  5: 'C',
  6: 'A',
  7: 'A',
  8: 'B',
  9: 'B',
  10: 'D'},
 'Values': {0: 1, 1: 2, 2: 3, 3: 1, 4: 2, 5: 3, 6: 2, 7: 6, 8: 8, 9: 3, 10: 0}})

df2 = pd.DataFrame({2: {('A', 0): np.nan,
  ('A', 1): np.nan,
  ('A', 2): 2.0,
  ('A', 6): 2.333333,
  ('A', 7): 3.666667,
  ('B', 3): np.nan,
  ('B', 4): np.nan,
  ('B', 8): 3.666667,
  ('B', 9): 4.3333330000000005,
  ('C', 5): np.nan,
  ('D', 10): np.nan}})

df.merge(df2.reset_index(level=0), left_index=True, right_index=True)


   Name  Values  0         2
0     A       1  A       NaN
1     A       2  A       NaN
2     A       3  A  2.000000
3     B       1  B       NaN
4     B       2  B       NaN
5     C       3  C       NaN
6     A       2  A  2.333333
7     A       6  A  3.666667
8     B       8  B  3.666667
9     B       3  B  4.333333
10    D       0  D       NaN
或加入:


使用“应用”在每组上应用滚动平均值

df['rolling_mean'] = df.groupby('Name').Values.apply(lambda x: x.rolling(3).mean())

    df  

  Name  Values  rolling_mean
0   A   1   NaN
1   A   2   NaN
2   A   3   2.000000
3   B   1   NaN
4   B   2   NaN
5   C   3   NaN
6   A   2   2.333333
7   A   6   3.666667
8   B   8   3.666667
9   B   3   4.333333
10  D   0   NaN

使用“应用”在每组上应用滚动平均值

df['rolling_mean'] = df.groupby('Name').Values.apply(lambda x: x.rolling(3).mean())

    df  

  Name  Values  rolling_mean
0   A   1   NaN
1   A   2   NaN
2   A   3   2.000000
3   B   1   NaN
4   B   2   NaN
5   C   3   NaN
6   A   2   2.333333
7   A   6   3.666667
8   B   8   3.666667
9   B   3   4.333333
10  D   0   NaN

重置索引级别=0,然后在index@Chris它仍然会将其重置为groupby orderreset\u indexlevel=0,然后在index@Chris它仍然会将其重置为groupby Orders。很抱歉,我认为这里存在一些问题。因为第6行和第2行是NAN@bazinga,很抱歉,这里面有个错误。现在就看编辑我很抱歉,但是我认为这里有一些问题。因为第6行和第2行是NAN@bazinga,很抱歉,这里面有个错误。现在查看编辑