连接具有分类特征的数据帧时的无序索引

2024-09-29 01:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码是为了使我的问题更容易理解。我想创建一个概览表,为此,我将循环到“order”列的所有唯一元素,为该列的每个唯一元素创建一个dataframe,然后我将获得“Status”列的每个元素所表示的百分比,值为“.u counts”,继续将其保存到另一个dataframe中,这是我的概览表

Overview_Table = pd.DataFrame()
for i, val in enumerate(df['Order'):
    dfi = df.loc[df['Order']==val]
    status = pd.DataFrame(dfi['Status Situation'].value_counts(normalize = True))
    statusi.columns = ['Order: {}'.format(val)]
    Overview_Table = pd.concat([Overview_Table, statusi], axis=1)

我面临的问题是,当我一直将值连接到Overview\表时,这些值的连接顺序不同。因此,我要寻找的是找出一种方法,使status dataframe始终以相同的顺序附加到Overview\表dataframe

我已经尝试过使用.sort_index,但是没有成功。此外,列“Order”和“Status”都是分类特性

希望我能简明扼要。我真的很感激你在这件事上的帮助!我们也欢迎您提出查找内容的建议


Tags: 元素dataframedfstatustableovervieworderval
1条回答
网友
1楼 · 发布于 2024-09-29 01:22:59

我想这就是你要找的

创建具有顺序和状态以及一些随机数的随机数据集:

import pandas as pd
import random
order = [random.choice(['aa', 'bb', 'cc']) for _ in range(1000)]
status = [random.choice(['red', 'yellow', 'green']) for _ in range(1000)]
nums = [random.randint(1, 10) for _ in range(1000)]

df = pd.DataFrame({'order':order,
                   'status':status,
                   'value':nums})

按顺序和状态分组并求和值:

g = df.groupby(['order', 'status']).agg({'value':'sum'}).reset_index(drop=False)

按顺序分组并求和(以获得分母)

order_g = df.groupby('order')['value'].sum().reset_index(drop=False)

通过左连接将它们合并:

combined = pd.merge(g, order_g, on='order', how='left')

创建百分比(值\u counts normalize):

combined['percentage'] = combined['value_x']/combined['value_y']

删除不需要的列:

combined.drop(['value_x', 'value_y'], axis=1, inplace=True)

如果没有你提供的实际数据集,以及你所寻找的东西的期望,很难肯定地回答这个问题,但我相信这就是你所寻找的

相关问题 更多 >