如何将列划分为组并在组之间循环



我有一个包含id的列,我使用pd将该列划分为组。像这样剪:

<表类> ID 组 tbody><<tr>3645390136781221361537023371122236455902377868233125140335787723

生成变量通常是一种不好的做法,理想的做法是使用容器(字典是理想的)

您可以使用groupby并将输出转换为列表字典:

out = df.groupby('Group')['ID'].apply(list).to_dict()

然后通过组键访问列表:

>>> out
{1: [3645390, 3678122],
2: [3615370, 3371122, 3645590],
3: [3778682, 3125140, 3578772]}
>>> out[1]  ## group #1
[3645390, 3678122]

如果你想array_x键:

(df.assign(Group='array_'+df['Group'].astype(str))
.groupby('Group')['ID'].apply(list).to_dict()
)

输出:

{'array_1': [3645390, 3678122],
'array_2': [3615370, 3371122, 3645590],
'array_3': [3778682, 3125140, 3578772]}

比起为每个数组创建一个新的列表,您可以更容易地将它们存储在字典中并使用array[1],array[2]等访问它们。实现应该是这样的:

array = {}
for group in df.Group.drop_duplicates().tolist():
array[group] = df[df.Group == group, 'ID'] 

或者:

>>> {k: list(v) for k, v in df.groupby('Group')['ID']}
{1: [3645390, 3678122], 2: [3615370, 3371122, 3645590], 3: [3778682, 3125140, 3578772]}
>>> 

但是如果你喜欢序列,就使用:

>>> dict(tuple(df.groupby('Group')['ID']))
{1: 0    3645390
1    3678122
Name: ID, dtype: int64, 2: 2    3615370
3    3371122
4    3645590
Name: ID, dtype: int64, 3: 5    3778682
6    3125140
7    3578772
Name: ID, dtype: int64}
>>> 

最新更新