pandas dataframe 根据名称对列进行分组并应用函数
pandas dataframe group columns based on name and apply a function
我有一个数据框:
df = [A B C D E_p0 E_p1 E_p2 K_p0 K_p1 K_2
a 2 r 4 3 6 1 9 5 1
e g 1 d 5 8 2 7 1 4]
而且我想根据前缀对列进行分组,并通过函数(例如 mean 或 max 或 rms)聚合它们。
因此,例如,如果我的函数是 max,则输出为:
df = [A B C D E K
a 2 r 4 6 9
e g 1 d 8 7 ]
您可以将没有分隔符的列转换为索引,然后使用 lambda 函数对每个列进行分组,并使用聚合函数,例如 max
:
m = df.columns.str.contains('_')
df = (df.set_index(df.columns[~m].tolist())
.groupby(lambda x: x.split('_')[0], axis=1)
.max()
.reset_index())
print (df)
A B C D E K
0 a 2 r 4 6 9
1 e g 1 d 8 7
自定义函数的解决方案:
def rms(x):
return np.sqrt(np.sum(x**2, axis=1)/len(x.columns))
m = df.columns.str.contains('_')
df1 = (df.set_index(df.columns[~m].tolist())
.groupby(lambda x: x.split('_')[0], axis=1)
.agg(rms)
.reset_index())
print (df1)
A B C D E K
0 a 2 r 4 3.915780 5.972158
1 e g 1 d 5.567764 4.690416
我有一个数据框:
df = [A B C D E_p0 E_p1 E_p2 K_p0 K_p1 K_2
a 2 r 4 3 6 1 9 5 1
e g 1 d 5 8 2 7 1 4]
而且我想根据前缀对列进行分组,并通过函数(例如 mean 或 max 或 rms)聚合它们。 因此,例如,如果我的函数是 max,则输出为:
df = [A B C D E K
a 2 r 4 6 9
e g 1 d 8 7 ]
您可以将没有分隔符的列转换为索引,然后使用 lambda 函数对每个列进行分组,并使用聚合函数,例如 max
:
m = df.columns.str.contains('_')
df = (df.set_index(df.columns[~m].tolist())
.groupby(lambda x: x.split('_')[0], axis=1)
.max()
.reset_index())
print (df)
A B C D E K
0 a 2 r 4 6 9
1 e g 1 d 8 7
自定义函数的解决方案:
def rms(x):
return np.sqrt(np.sum(x**2, axis=1)/len(x.columns))
m = df.columns.str.contains('_')
df1 = (df.set_index(df.columns[~m].tolist())
.groupby(lambda x: x.split('_')[0], axis=1)
.agg(rms)
.reset_index())
print (df1)
A B C D E K
0 a 2 r 4 3.915780 5.972158
1 e g 1 d 5.567764 4.690416