我有一个包含4列的数据框
Asset1 Asset2 Asset3 Asset4
a b c d
e f g h
我想使用itertools.combinations
创建一列,以便为我提供唯一组合的结果,因此理想情况下,输出为:
Asset1 Asset2 Asset3 Asset4 test
a b c d [abc, abd, bcd, acd]
e f g h [efg, efh, egh, fgh]
我尝试使用.join()
及其组合,但不起作用。有什么想法吗?
答案 0 :(得分:1)
欢迎您!
我建议逐行使用lambda
(axis=1
):
from itertools import combinations
import pandas as pd
df = pd.DataFrame({'Asset1':('a','e'), 'Asset2': ('b','f'), 'Asset3': ('c', 'g'), 'Asset4': ('d', 'h')})
df['combinations'] = df.apply(lambda r: list(combinations(r, 3)), axis=1)
print(df)
输出:
Asset1 ... combinations
0 a ... [(a, b, c), (a, b, d), (a, c, d), (b, c, d)]
1 e ... [(e, f, g), (e, f, h), (e, g, h), (f, g, h)]
[2 rows x 5 columns]
如果您以后仅迭代组合,也可以跳过list(combinations...
-这样,您将节省一些内存并将计算延迟到访问df['combinations']
的那一刻:
df['combinations'] = df.apply(lambda r: combinations(r, 3), axis=1)
print(df)
然后,您将在combinations
列中获得一个非常神秘的对象:
Asset1 ... combinations
0 a ... <itertools.combinations object at 0x0000022392...
1 e ... <itertools.combinations object at 0x0000022392...
[2 rows x 5 columns]