每行指标和每列刺激平均值的数据框。怎么做?
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
我有一个非常小的问题,但我对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