计算数据框列中列表的所有排列
Posted
技术标签:
【中文标题】计算数据框列中列表的所有排列【英文标题】:compute all permutations of a list in a dataframe column 【发布时间】:2019-05-29 00:33:48 【问题描述】:我正在尝试计算 df 中列表或列的所有排列,同时保留 id 列。
input df
id list
1 foo bar
2 dog cat
desired df output
id list
1 foo bar
1 bar foo
2 dog cat
2 cat dog
【问题讨论】:
值真的是'foo bar'
,还是['foo', 'bar']
?
【参考方案1】:
IIUC 只使用来自itertools
的permutations
,那么它是unnest
df['list']=df['list'].str.split(' ')
import itertools
df['list']=[list(itertools.permutations(x)) for x in df['list']]
pd.DataFrame('id':df.id.repeat(df['list'].str.len()),'list':np.concatenate(df['list'].values).tolist())
Out[522]:
id list
0 1 [foo, bar]
0 1 [bar, foo]
1 2 [dog, cat]
1 2 [cat, dog]
【讨论】:
@leo 不,你不能:-)【参考方案2】:您可以使用permutations
的列表推导:
from itertools import permutations
df = pd.DataFrame('id': [1, 2], 'list': [['foo', 'bar'], ['cat', 'dog']])
>>> pd.DataFrame([[id_, list(perm)]
for id_, list_items in df.values for perm in permutations(list_items)],
columns=['id', 'list'])
id list
0 1 [foo, bar]
1 1 [bar, foo]
2 2 [cat, dog]
3 2 [dog, cat]
根据列表内容的确切结构,您可能首先需要解析。
【讨论】:
此解决方案似乎解决了列中的多个字数统计问题,而第一个解决方案似乎仅适用于静态字数统计。 这不是更好地解决您的问题吗?此外,此解决方案不会改变原始数据帧。以上是关于计算数据框列中列表的所有排列的主要内容,如果未能解决你的问题,请参考以下文章