熊猫按列值过滤

时间:2020-07-19 20:08:58

标签: python pandas numpy

如何按列对值排序,然后仅保留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()函数之后如何处理它。 我觉得我已经完成了不必要的复杂操作(?)。

1 个答案:

答案 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