如何组合不同的行并获得数据框架中列的平均值



我有以下df,其中包含2种类型的信息。第一个是项目的特征(有些是字符串,有些是整数)。另一种类型是关于所述项目的发射值(以float格式)。

tbody> <<tr>
字符。1 生产。2 生产。3 排放1 排放2
1998ABC12
1998ABC34
2000ABC12
2001德道明>12
2001德道明>34
df.groupby(['Charact. 1','Charact. 2', 'Charact. 3'])[['Emission 1','Emission 2']].mean()
Emission 1   Emission 2
Charact. 1  Charact. 2  Charact. 3      
1998             AB              C           2.0    3.0
2000             AB              C           1.0    2.0
2001             DE              F           2.0    3.0
columns = ["1","2","3","E1","E2"]
row1 = ["1998",
"1998",
"2000",
"2001",
"2001"]
row2 = ["AB",
"AB",
"AB",
"DE",
"DE"]
row3 = ["C",
"C",
"C",
"F",
"F"]
row4 = [1,
3,
1,
1,
3]
row5 = [2,
4,
2,
2,
4]

df = pd.DataFrame([row1, row2, row3, row4, row5]).T
df.columns = columns
df.groupby(["1","2","3"]).agg('mean').reset_index()

以您想要的方式产生

这对我有用:

df = pd.DataFrame({'c1': [1998, 1998, 2000, 2001, 2001],
'c2': ['AB', 'AB', 'AB', 'DE', 'DE'],
'c3': ['C', 'C', 'C', 'F', 'F'],
'e1': [1, 3, 1, 1, 3],
'e2': [2, 4, 2, 2, 4]})
print(df.groupby(['c1','c2','c3'], as_index=False).mean())    
# Output:
#      c1  c2 c3  e1  e2                                
# 0  1998  AB  C   2   3
# 1  2000  AB  C   1   2
# 2  2001  DE  F   2   3

编辑:这也为我工作,所以我不确定问题究竟在哪里在于你的代码-也许数据框架的结构与你的问题所暗示的有所不同?

df = pd.DataFrame({'c1': [1998, 1998, 2000, 2001, 2001],
'c2': ['AB', 'AB', 'AB', 'DE', 'DE'],
'c3': ['C', 'C', 'C', 'F', 'F'],
'e1': [1, 3, 1, 1, 3],
'e2': [2, 4, 2, 2, 4]})
print(df.groupby(['c1','c2','c3'], as_index=False).agg({'e1': 'mean', 'e2': 'mean',}))
# Output:
#      c1  c2 c3  e1  e2
# 0  1998  AB  C   2   3
# 1  2000  AB  C   1   2
# 2  2001  DE  F   2   3

最新更新