我有一个多维数据框,它是从excel表中读取的,最后看起来像下面的输入表。数据框指定了2级列头。
df_1 = pd.DataFrame(df.values[2:], columns=[header_1a, header_1b])
pd.MultiIndex.from_frame(df_1)
d = {
"Hier_1": ["a1", "a1", "a1", "a1", "a1", "a2", "a2"],
"Hier_2": ["b1", "b1", "b1", "b2", "b2", "b3", "b3"],
"Hier_3": ["c1", "c2", "c3", "c1", "c2", "c4", "c5"],
"Param_1": [1, 1, 1, 2, 2, 3, 3],
"Param_2": ["p", "q", "r", "s", "t", "u", "v"],
}
df = pd.DataFrame(d)
df = df.set_index(["Hier_1", "Hier_2", "Hier_3"])
print(df)
Param_1 Param_2
Hier_1 Hier_2 Hier_3
a1 b1 c1 1 p
c2 1 q
c3 1 r
b2 c1 2 s
c2 2 t
a2 b3 c4 3 u
c5 3 v
我想要一个以Hier 1和Hier 2为键进行分组的输出表。我想让它分组,使param 1的结果是给定的Hier 1和Hier 2集合的Param 1值的总和。我希望输出param 2列显示给定Hier 1和Hier 2的所有Param 2值的列表。
Instance Name | |
________________|_______________|________
Hier 1 |Hier 2 |Param 1 |Param 2
________|_______|_______________|________
a1 |b1 |3 |p, q, r
a1 |b2 |4 |s, t
a2 |b3 |6 |u, v
下面的表对于一个只有一级列头的数据框来说是可行的。但对于一个有两层列头的数据框,我却什么都做不到。我总是得到一个键错误。
df_1_grouped = df_1.groupby(['Hier1', 'Hier2'], as_index=False).agg({'Param 1': 'sum', 'Param 2': lambda x: tuple(x)})
你可以按级别进行分组,保留两列并使用lambda。
df_result = (
df[["Param_1", "Param_2"]]
.groupby(level=[0, 1])
.agg(lambda x: x.sum() if x.dtype == "int64" else ", ".join(x))
)
print(df_result)
Param_1 Param_2
Hier_1 Hier_2
a1 b1 3 p, q, r
b2 4 s, t
a2 b3 6 u, v