首页 > 解决方案 > 如何根据一列中的唯一值将熊猫数据框划分为不同的数据框并对其进行迭代?

问题描述

我有一个包含三列的数据框

第一列有 3 个唯一值我使用下面的代码来创建唯一的数据框,但是我无法迭代该数据框并且不知道如何使用它来迭代。

df = pd.read_excel("input.xlsx")

unique_groups = list(df.iloc[:,0].unique())    ### lets assume Unique values are 0,1,2
mtlist = []

for index, value in enumerate(unique_groups):
    globals()['df%s' % index] = df[df.iloc[:,0] == value]
    mtlist.append('df%s' % index)
print(mtlist)

输出/输出

['df0', 'df1', 'df2']

例如,假设我想找出第一个唯一数据帧的长度,如果我手动输入 DF 的名称,我会得到正确的输出

len(df0)

O/P
35

但是我正在尝试使代码自动化,因此从技术上讲,我想找到长度并正常迭代该数据帧,就像我通过键入名称一样。

我正在寻找的是如果我尝试下面的代码

len('df%s' % 0)

我想获取数据帧的实际长度而不是字符串的长度。有人可以指导我如何做到这一点吗?

我也尝试使用下面的代码创建一个字典,但我无法弄清楚当 DF 列超过两个时如何迭代字典,其中键是唯一组,值包含同一行中的两列。

df = pd.read_excel("input.xlsx")

unique_groups = list(df["Assignment Group"].unique())
length_of_unique_groups = len(unique_groups)
mtlist = []

df_dict = {name: df.loc[df['Assignment Group'] == name] for name in unique_groups}

有人可以提供更好的解决方案吗?

更新

SAMPLE DATA

Assignment_group    Description                         Document
Group A             Text to be updated on the ticket 1  doc1.pdf
Group B             Text to be updated on the ticket 2  doc2.pdf
Group A             Text to be updated on the ticket 3  doc3.pdf
Group B             Text to be updated on the ticket 4  doc4.pdf
Group A             Text to be updated on the ticket 5  doc5.pdf
Group B             Text to be updated on the ticket 6  doc6.pdf
Group C             Text to be updated on the ticket 7  doc7.pdf
Group C             Text to be updated on the ticket 8  doc8.pdf

假设有 100 行数据

我正在尝试使用上述数据自动创建 ServiceNow 票证。所以我的最终目标是 GROUP A 票应该发给一个组,但是对于每个描述都必须创建一个独特的任务,但是我们可以将 10 个任务俱乐部一次并作为一个请求提交,所以如果我根据Assignment_group 迭代会更容易(这是我能想到的唯一想法)

例如,假设我们在该请求中有 REQUEST001,它将有多个子任务,例如 STASK001、STASK002 ... STASK010。

希望这可以帮助

标签: pythonpython-3.xdataframe

解决方案


您的问题很容易解决groupby: 中最有用的工具之一pandas。:

length_of_unique_groups = df.groupby('Assignment Group').size()

您可以对剩余的列进行各种操作(求和、计数、标准等),例如获取每组的价格平均值(如果那是一列)。


推荐阅读