每行指标和每列刺激平均值的数据框。怎么做?

Dataframe with metrics per row and stimuli average per column. How to do it?

我有一个非常小的问题,但我对Pandas库不太了解,也不知道如何操作。

我有一个数据框,其中有受试者的 ID,以及针对刺激物数量(Stim_1、Stim_2 等)重复的一些指标(A、B、C)。 )

我需要从这个数据框创建另一个数据框,该数据框由每个指标的每个刺激的平均值组成。到现在我写了

 df_mean = pd.DataFrame()
 for col in df:
 m = df[col].mean()

这里是原始数据框

这里是我要创建的数据框

您可以通过 split 通过所有没有 ID 的列创建 MultiIndex,因此可以通过 DataFrame.stack 和第二级聚合 mean 重塑:

print (df)
   ID  A_Stim1  A_Stim2  A_Stim3  B_Stim1  B_Stim2  B_Stim3
0   1        1        5        6        9        8        7
1   8        1        6        4        5        4        5

df1 = df.set_index('ID')
df1.columns = df1.columns.str.split('_', expand=True, n=1)
df2 = df1.stack(0).groupby(level=1).mean()
print (df2)
   Stim1  Stim2  Stim3
A    1.0    5.5    5.0
B    7.0    6.0    6.0

您可以使用 pandas.wide_to_long:

cols = ['A', 'B', 'C']
# or generic
cols = df.columns.str.extract('([^_]+)_', expand=False).unique()

(pd
 .wide_to_long(df.reset_index(), cols,
               i='index', j='id2', sep='_',
               suffix='Stim\d+') # can also be generic '.+'
 .groupby(level='id2').mean()
 .T
)

输出(与提供的形状相同的输入,填充1s):

id2  Stim1  Stim2  Stim3
A      1.0    1.0    1.0
B      1.0    1.0    1.0
C      1.0    1.0    1.0