转置或融化以按列分组?
Transpose or melt to group by columns?
我有这个数据框:
df = pd.DataFrame({ "cluster" : ["A", "A", "A", "A", "A", "C", "C", "C", "C"],
"col1": ["0", "0", "1", "1", "0", "1", "0", "1", "0"],
"col2": ["1", "1", "1", "1", "0", "1", "1", "1", "0"] })
我想不出用这种格式得到数据框结果的最佳方法
col
cluster
avg
col1
A
0.4
col1
C
0.5
col2
A
0.8
col2
C
0.75
我试过使用转置,然后融化集群,但没有成功。任何帮助将不胜感激!
我想要的结果是 table - 其中所有列(集群除外)都是行,集群是融化的,并且计算每个集群的列值的平均值
看起来 melt
和 groupby
+ mean
的组合就可以了。请注意,“col”值是您输入的字符串,因此我们还必须先将它们转换为整数,然后再计算平均值:
out = (df.melt(['cluster'], var_name='col')
.assign(value=lambda x: x['value'].astype(int))
.groupby(['col', 'cluster'], as_index=False).mean())
输出:
col cluster value
0 col1 A 0.40
1 col1 C 0.50
2 col2 A 0.80
3 col2 C 0.75
您可以按 cluster
列分组并计算每组的平均值,然后 melt
df[['col1', 'col2']] = df[['col1', 'col2']].astype(int)
out = (df.groupby('cluster')
.agg('mean').reset_index()
.melt(id_vars=['cluster'], var_name='col', value_name='avg')
)
print(out)
cluster col avg
0 A col1 0.40
1 C col1 0.50
2 A col2 0.80
3 C col2 0.75
我有这个数据框:
df = pd.DataFrame({ "cluster" : ["A", "A", "A", "A", "A", "C", "C", "C", "C"],
"col1": ["0", "0", "1", "1", "0", "1", "0", "1", "0"],
"col2": ["1", "1", "1", "1", "0", "1", "1", "1", "0"] })
我想不出用这种格式得到数据框结果的最佳方法
col | cluster | avg |
---|---|---|
col1 | A | 0.4 |
col1 | C | 0.5 |
col2 | A | 0.8 |
col2 | C | 0.75 |
我试过使用转置,然后融化集群,但没有成功。任何帮助将不胜感激!
我想要的结果是 table - 其中所有列(集群除外)都是行,集群是融化的,并且计算每个集群的列值的平均值
看起来 melt
和 groupby
+ mean
的组合就可以了。请注意,“col”值是您输入的字符串,因此我们还必须先将它们转换为整数,然后再计算平均值:
out = (df.melt(['cluster'], var_name='col')
.assign(value=lambda x: x['value'].astype(int))
.groupby(['col', 'cluster'], as_index=False).mean())
输出:
col cluster value
0 col1 A 0.40
1 col1 C 0.50
2 col2 A 0.80
3 col2 C 0.75
您可以按 cluster
列分组并计算每组的平均值,然后 melt
df[['col1', 'col2']] = df[['col1', 'col2']].astype(int)
out = (df.groupby('cluster')
.agg('mean').reset_index()
.melt(id_vars=['cluster'], var_name='col', value_name='avg')
)
print(out)
cluster col avg
0 A col1 0.40
1 C col1 0.50
2 A col2 0.80
3 C col2 0.75