Python 通过考虑各种特征组合(列)对数据帧进行排序

Python 通过考虑各种特征组合(列)对数据帧进行排序,python,pandas,matplotlib,plotly,bar-chart,Python,Pandas,Matplotlib,Plotly,Bar Chart,我有一个熊猫数据框,它有4列,看起来像 import plotly.express as px import pandas as pd import seaborn as sns import matplotlib.pyplot as plt data = pd.read_excel('disparity.xlsx') data.head() 然后我使用plotly绘制堆叠的条形图 px.bar(data.head().set_index('COUNTY')) 输出是 但是我希望这个堆

我有一个熊猫数据框,它有4列,看起来像

import plotly.express as px
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = pd.read_excel('disparity.xlsx')
data.head()

然后我使用plotly绘制堆叠的条形图

px.bar(data.head().set_index('COUNTY'))
输出是

但是我希望这个堆叠条形图以降序或升序显示。另外,除了三列之外,我还想通过一次一列两列的方式绘制排名堆积条形图,即(新冠病毒死亡,糖尿病);(新冠病毒死亡,肥胖)和(肥胖,糖尿病)

因此,我实际上想要绘制一个总共4个排列的堆叠条形图。请在这方面帮助我。

试试这个:

for column_name, column_series in df.iloc[:, 1:].iteritems():
    fig = px.bar(df, x='COUNTY', y=column_name)
    fig.show()

其思想是为每一行计算排序依据的键,将其作为一个新列添加到数据帧中,并使用
DataFrame.sort\u value
进行排序。(不幸的是,现在没有简单的方法可以通过外部序列对数据帧进行排序,而不将其添加为列。)

首先,让我们永久设置索引,并保存原始功能的列表:

data.set_索引('country',inplace=True)
原始特征=列表(data.columns)
要按总高度排序,首先向数据框中添加一个额外的列,其中包含每行的总和

data[“Total”]=data.sum(axis='columns')
并按此排序(但从绘图中删除“总计”列):

px.bar(data.sort\u值(“总计”,升序=真)[原始\u特征])
您可以使用
升序
参数控制升序/降序

另一个例子是,按“新冠病毒死亡”+“糖尿病”排序:

data[“新冠病毒+糖尿病”]=data[“新冠病毒死亡”]+data[“糖尿病”]
px.bar(data.sort_值(“新冠病毒+糖尿病”,升序=真)[原始特征])

由于您提到要按每对列的总和进行排序,因此可以通过循环自动进行排序:

导入itertools
对于itertools.组合中的x,y(原始功能,2):
name=f“{x}+{y}”
数据[名称]=数据[x]+数据[y]
px.bar(data.sort_值(按=名称,升序=真)[原始特征])
事实上,您可以将其推广到任意数量的功能;i、 e.如果您希望每个特征子集(即每个特征、每个特征对等,总计)的总和有一个图,您可以:

import operator
from functools import reduce

for k in range(1, len(original_features) + 1):
    for comb in itertools.combinations(original_features, k):
        name = " + ".join(comb)
        data[name] = reduce(operator.add, (data[col] for col in comb))
        # optional: reorder the columns so that the ones we're sorting by come first
        order = list(comb) + [col for col in original_features if col not in comb]
        px.bar(data.sort_values(by=name, ascending=True)[order])

在“我希望此堆叠条形图以降序或升序显示”中,您希望如何对条形图进行排序?按总高度?是的。根据高度,即三列的总和,给出每列的曲线图。但是我希望通过一次一列两列的方式进行堆叠条形图,并且应该对堆叠条形图进行排序。那么,您想要的和您在上面粘贴的有什么不同呢?非常感谢@阿纳坎德