Python:如何向dataframe添加.mean的特定列
如何将b和c的平均值添加到数据帧中?我试着合并,但似乎不起作用。因此,我想在我的数据框中添加两个额外的列b_-mean和c_-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':
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需要一个适应分组的解决方案。这也是一个很好的解决方案。