Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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
Python:如何向dataframe添加.mean的特定列_Python_Pandas_Dataframe - Fatal编程技术网

Python:如何向dataframe添加.mean的特定列

Python:如何向dataframe添加.mean的特定列,python,pandas,dataframe,Python,Pandas,Dataframe,如何将b和c的平均值添加到数据帧中?我试着合并,但似乎不起作用。因此,我想在我的数据框中添加两个额外的列b_-mean和c_-mean,结果是df.groupBy('date').mean() 数据帧 a b c date 0 2 3 5 1 1 5 9 1 1 2 3 7 1 1 我有以下代码 import pandas as pd a = [{'date': 1,'a':2, 'b':3, 'c':5}, {'date':1, 'a':

如何将b和c的平均值添加到数据帧中?我试着合并,但似乎不起作用。因此,我想在我的数据框中添加两个额外的列b_-mean和c_-mean,结果是
df.groupBy('date').mean()

数据帧

  a  b  c  date
0  2  3  5     1
1  5  9  1     1
2  3  7  1     1
我有以下代码

import pandas as pd

a = [{'date': 1,'a':2, 'b':3, 'c':5}, {'date':1, 'a':5, 'b':9, 'c':1}, {'date':1, 'a':3, 'b':7, 'c':1}]

df = pd.DataFrame(a)

x =  df.groupby('date').mean()
编辑:

期望的输出如下
df.groupby('date').mean()返回:

             a         b         c
date                              
1     3.333333  6.333333  2.333333
我期望的结果是以下数据帧

   a  b  c  date  a_mean   b_mean
0  2  3  5     1  3.3333   6.3333
1  5  9  1     1  3.3333   6.3333 
2  3  7  1     1  3.3333   6.3333

我假设您需要将列的平均值添加为dataframe中的新列值。否则请纠正我

您可以通过直接获取列的平均值来实现,并通过指定like来创建一个新列

In [1]: import pandas as pd

In [2]: a = [{'date': 1,'a':2, 'b':3, 'c':5}, {'date':1, 'a':5, 'b':9, 'c':1}, {'date':1, 'a':3, 'b':7, 'c':1}]

In [3]: df = pd.DataFrame(a)

In [4]: for col in ['b','c']:
    ...:      df[col+"_mean"] = df.groupby('date')[col].transform('mean')

In [5]: df
Out[5]:
   a  b  c  date    b_mean    c_mean
0  2  3  5     1  6.333333  2.333333
1  5  9  1     1  6.333333  2.333333
2  3  7  1     1  6.333333  2.333333

正如@ayhan提到的,你可以使用它。转换类似于apply,但它使用与原始数据帧相同的索引,而不是分组在上的列中的唯一值

df['a_mean'] = df.groupby('date')['a'].transform('mean')
df['b_mean'] = df.groupby('date')['b'].transform('mean')

>>> df
   a  b  c  date    b_mean    a_mean
0  2  3  5     1  6.333333  3.333333
1  5  9  1     1  6.333333  3.333333
2  3  7  1     1  6.333333  3.333333
解决方案
join
rsuffix
参数一起使用

df.join(df.groupby('date').mean(), on='date', rsuffix='_mean')

   a  b  c  date    a_mean    b_mean    c_mean
0  2  3  5     1  3.333333  6.333333  2.333333
1  5  9  1     1  3.333333  6.333333  2.333333
2  3  7  1     1  3.333333  6.333333  2.333333

我们可以将其限制为
['a','b']

df.join(df.groupby('date')[['a', 'b']].mean(), on='date', rsuffix='_mean')

   a  b  c  date    a_mean    b_mean
0  2  3  5     1  3.333333  6.333333
1  5  9  1     1  3.333333  6.333333
2  3  7  1     1  3.333333  6.333333
额外学分
没有真正回答你的问题。。。但我觉得它很整洁

d1 = df.set_index('date', append=True).swaplevel(0, 1)
g = df.groupby('date').describe()
d1.append(g).sort_index()

                   a         b         c
date                                    
1    0      2.000000  3.000000  5.000000
     1      5.000000  9.000000  1.000000
     2      3.000000  7.000000  1.000000
     25%    2.500000  5.000000  1.000000
     50%    3.000000  7.000000  1.000000
     75%    4.000000  8.000000  3.000000
     count  3.000000  3.000000  3.000000
     max    5.000000  9.000000  5.000000
     mean   3.333333  6.333333  2.333333
     min    2.000000  3.000000  1.000000
     std    1.527525  3.055050  2.309401

您可能需要groupby.transform,但请添加所需的输出,以便更清晰。迭代很好,但OP需要一个适应分组的解决方案。这也是一个很好的解决方案。