熊猫根据最大条件从列中获取值以获得正确的集群名称
Panda get value from column based on max condition to get proper cluster names
我已经成功地对我的数据进行了聚类,并显示了以下数据框:
cluster_group name value
0 1 A 20
1 1 B 30
2 1 C 10
3 1 D 50
4 2 E 20
5 2 F 10
...
我想要更好地导出,是给 cluster_group 一个名称而不是一个整数。该名称应基于具有最高值的名称列。所以结果应该是这样的:
cluster_name name value
0 D A 20
1 D B 30
2 D C 10
3 D D 50
4 E E 20
5 E F 10
...
我如何以最有效的方式做到这一点?
如果每个组的名称都是唯一的,则通过 DataFrameGroupBy.idxmax
per groups in GroupBy.transform
:
始终获得唯一的组
df['cluster_group'] = (df.set_index('name')
.groupby('cluster_group')['value']
.transform('idxmax')
.to_numpy())
print (df)
cluster_group name value
0 D A 20
1 D B 30
2 D C 10
3 D D 50
4 E E 20
5 E F 10
如果可能的话,多个相同的名字可能会相同clusters
,所以应该将一些组连接在一起:
print (df)
cluster_group name value
0 1 A 20
1 1 E 300 <- max per group 1 is E
2 1 C 10
3 1 D 50
4 2 E 20 <- max per group 2 is E
5 2 F 10
df['cluster_group'] = (df.set_index('name')
.groupby('cluster_group')['value']
.transform('idxmax')
.to_numpy())
print (df)
cluster_group name value
0 E A 20
1 E E 300
2 E C 10
3 E D 50
4 E E 20
5 E F 10
我已经成功地对我的数据进行了聚类,并显示了以下数据框:
cluster_group name value
0 1 A 20
1 1 B 30
2 1 C 10
3 1 D 50
4 2 E 20
5 2 F 10
...
我想要更好地导出,是给 cluster_group 一个名称而不是一个整数。该名称应基于具有最高值的名称列。所以结果应该是这样的:
cluster_name name value
0 D A 20
1 D B 30
2 D C 10
3 D D 50
4 E E 20
5 E F 10
...
我如何以最有效的方式做到这一点?
如果每个组的名称都是唯一的,则通过 DataFrameGroupBy.idxmax
per groups in GroupBy.transform
:
df['cluster_group'] = (df.set_index('name')
.groupby('cluster_group')['value']
.transform('idxmax')
.to_numpy())
print (df)
cluster_group name value
0 D A 20
1 D B 30
2 D C 10
3 D D 50
4 E E 20
5 E F 10
如果可能的话,多个相同的名字可能会相同clusters
,所以应该将一些组连接在一起:
print (df)
cluster_group name value
0 1 A 20
1 1 E 300 <- max per group 1 is E
2 1 C 10
3 1 D 50
4 2 E 20 <- max per group 2 is E
5 2 F 10
df['cluster_group'] = (df.set_index('name')
.groupby('cluster_group')['value']
.transform('idxmax')
.to_numpy())
print (df)
cluster_group name value
0 E A 20
1 E E 300
2 E C 10
3 E D 50
4 E E 20
5 E F 10