我有以下df,其中包含2种类型的信息。第一个是项目的特征(有些是字符串,有些是整数)。另一种类型是关于所述项目的发射值(以float格式)。
字符。1 | 生产。2 | 生产。3 | 排放1 | 排放2 | 1998 | AB | C | 1 | 2 |
---|---|---|---|---|
1998 | AB | C | 3 | 4 |
2000 | AB | C | 1 | 2 |
2001 | 德道明> | 1 | 2 | |
2001 | 德道明> | 3 | 4 |
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