繁体   English   中英

Python Pandas数据框:收集列的值

[英]Python Pandas dataframe: Collect values of a column

我有以下数据框:

      var_1     var_2                         item_list 
0         0         1         [beer, apple, pear, rice]    
1         0         1          [egg, banana, oil, pear]   
2         0         1                    [beer, noodle]    
3         1         0                    [tomato, milk]    
4         1         0                           [apple] 

是否可以使用数据框应用功能收集item_list中的所有项目? 输出应类似于[beer, apple, pear, rice, egg, banana, oil, pear, ...] ,但列表中没有重复项。

还是我必须逐个单元地迭代以将所有值收集到一个列表中?

如果您的DataFrame是df ,则可以使用

import itertools

itertools.chain.from_iterable(df.item_list)

创建所有项目的可迭代对象。 如果你这样做

list(itertools.chain.from_iterable(df.item_list))

然后它将成为一个列表。


import pandas as pd

df = pd.DataFrame({'item_list': [[1, 2], [3, 4]]})

import itertools

>>> list(itertools.chain.from_iterable(df.item_list.values))
[1, 2, 3, 4]

我认为您可以apply Seriesstack并转换为tolist

print df['item_list'].apply(pd.Series).stack().tolist()
['beer', 'apple', 'pear', 'rice', 'egg', 'banana', 'oil', 
 'pear', 'beer', 'noodle', 'tomato', 'milk', 'apple']

如果需要删除重复项,请使用drop_duplicatesset

print df['item_list'].apply(pd.Series).stack().drop_duplicates().tolist()
['beer', 'apple', 'pear', 'rice', 'egg', 'banana', 'oil', 'noodle', 'tomato', 'milk']

print list(set(df['item_list'].apply(pd.Series).stack().tolist()))
['tomato', 'oil', 'apple', 'pear', 'milk', 'beer', 'noodle', 'rice', 'egg', 'banana']

编辑:

如果您需要先删除每行中的重复项:

print df['item_list'].apply(lambda x: pd.Series(list(set(x)))).stack().drop_duplicates().tolist()
> l= list(df['item_list'] 
> flattened_list = [item for sublist in l for item in sublist]
> flattened = set(flattened_list)
> pprint.pprint(flattened)
{'apple',
 'banana',
 'beer',
 'egg',
 'milk',
 'noodle',
 'oil',
 'pear',
 'rice',
 'tomato'}

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM