我有一堆与不同群组相关联的项目,我最终想为每个群组创建一个列表,其中包含所有相关项目。
问题是我不知道有多少组,所以如何动态生成正确数量的列表,以及如何调用它们?
我正在循环浏览item_list
和group_list
两个不同系列,彼此完美对齐,如item_list[item]
在group_list[item]
中有相应的组
以下是一些原始数据:
item list group list
A 1
B 1
C 2
D 1
E 2
F 1
G 2
H 2
I 1
J 2
这是我到目前为止所做的:
groups = []
for item in item_list:
groups.append(group_list[item])
# Get only unique values (instead of having groups 1,1,1,2,2 --> 1,2)
group_set = list(set(groups))
# Number of lists that need to be generated
len(group_set)
我最终希望得到什么:
[IN]: print list_1:
[OUT]: ['A', 'B', 'D', 'F', 'I']
[IN]: print list_2:
[OUT]: ['C', 'E', 'G', 'H', 'J']
其中生成了list_1和list_2,因为我当前代码中的len(group_set)等于2.
我只是不确定如何动态生成该数量的列表,并将每个项目放在适当的列表中。
非常感谢任何建议/指导...
答案 0 :(得分:1)
您可以使用python词典理解来编译您想要实现的列表......下一个代码块中的最后两行执行繁重的工作。代码块的其余部分是我将您的数据放入pandas。
import pandas as pd
# get your data into pandas
data = '''
item_list group_list
A 1
B 1
C 2
D 1
E 2
F 1
G 2
H 2
I 1
J 2'''
from StringIO import StringIO # import from io for python 3
df = pd.read_csv(StringIO(data), sep=r'\s+', index_col=None, header=0)
# use a dictionary comprehension to compile the collection of lists
lists = {x: df[df['group_list'] == x].item_list.tolist()
for x in df['group_list'].unique()}
在ipython中给了我以下内容:
In [27]: print(lists)
{1: ['A', 'B', 'D', 'F', 'I'], 2: ['C', 'E', 'G', 'H', 'J']}
In [28]: print(lists[1])
['A', 'B', 'D', 'F', 'I']
In [29]: print(lists[2])
['C', 'E', 'G', 'H', 'J']
答案 1 :(得分:1)
或者你可以做上面提到的@EdChum ......
In [11]: x = df.groupby('group_list')['item_list'].apply(lambda x: x.tolist())
In [12]: print(x)
group_list
1 [A, B, D, F, I]
2 [C, E, G, H, J]
Name: item_list, dtype: object
In [13]: print(x[1])
['A', 'B', 'D', 'F', 'I']
In [14]: print(x[2])
['C', 'E', 'G', 'H', 'J']