我有一个包含id的列,我使用pd将该列划分为组。像这样剪:
<表类>
ID
组
tbody><<tr>3645390 1 3678122 1 3615370 2 3371122 2 3645590 2 3778682 3 3125140 3 3578772 3 表类>
生成变量通常是一种不好的做法,理想的做法是使用容器(字典是理想的)
您可以使用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}
>>>