如何按列对值排序,然后仅保留n个列? 这就是我正在努力的事情:
import pandas as pd
import numpy as np
file = ('example.csv')
df = pd.read_csv(file)
df = df[['ID', 'Hero', 'Customer']].drop_duplicates('ID', keep="first")
df.head()
Output:
ID | Hero | Customer
45 Rambo Nils
90 Superman Sophia
33 Superman Sophia
55 Rambo Sophia
12 Hulk Sophia
要获得我想要的格式(在本例中为热图),我已经这样做了:
heatmap = df.groupby(['Hero', 'Customer']).size().unstack(fill_value=0)
heatmap
Output:
Ida Jonas Morgan Sophia Nils
Rambo 0 0 3 11 1
Superman 2 0 0 66 0
Hulk 0 0 0 7 0
我想要做的是按降序对其进行排序,以使具有最高值的列被推到左侧,如下所示:
想要的输出:
Sophia Morgan Ida Nils Jonas
Rambo 11 3 0 1 0
Superman 66 0 2 0 0
Hulk 7 0 0 0 0
如果我想保留n个客户,该怎么办? 我遇到的另一个问题是ID在数据操作中迷失了方向,我不确定在count()函数之后如何处理它。 我觉得我已经完成了不必要的复杂操作(?)。
答案 0 :(得分:1)
具有df
:
Ida Jonas Morgan Sophia Nils
Rambo 0 0 3 11 1
Superman 2 0 0 66 0
Hulk 0 0 0 7 0
尝试:
df.reindex(df.sum().sort_values(ascending = False).index, axis=1)
结果:
Sophia Morgan Ida Nils Jonas
Rambo 11 3 0 1 0
Superman 66 0 2 0 0
Hulk 7 0 0 0 0