python - Python:在 python 数据框中创建包含列表作为其值的两列的组合
问题描述
我有一个数据框,其列中有列表,我试图找出一种方法来找到两个列表的组合。关键是 ID 必须映射到正确的组合 -
df = pd.DataFrame([[1,['a','b','c'],['l','m']],[2,['d','e','f'],['n','o']]],columns = ['id','col1','col2'])
结果应该是——
id col1 col2
----------------
0 1 a l
1 1 a m
2 1 b l
3 1 b m
4 1 c l
5 1 c m
6 2 d n
7 2 d o
8 2 e n
9 2 e o
10 2 f n
11 2 f o
我是 python 新手,曾尝试探索 itertools 库及其产品功能,但我不明白如何准确获得这种输出格式。
解决方案
itertools.product
与列表推导一起使用来构造组合:
print (pd.DataFrame([(a,*x) for a,b,c in df.to_numpy()
for x in product(b,c)],
columns=df.columns))
id col1 col2
0 1 a l
1 1 a m
2 1 b l
3 1 b m
4 1 c l
5 1 c m
6 2 d n
7 2 d o
8 2 e n
9 2 e o
10 2 f n
11 2 f o
或者,如果您不想明确表示 , a
, b
, c
,d
列,则可以使用解包:
from itertools import product, chain
pd.DataFrame(chain.from_iterable(product([a], *rest)
for a, *rest in df.to_numpy()),
columns=df.columns
)
推荐阅读
- python - 在 Jinja2 中使用 .get()?
- java - 找不到与 IP 地址 xxx.xx.x 匹配的主题备用名称 - LDAPS
- c++ - OpenCV 中的 Mat 类(c++)
- javascript - 如何使用搜索选项对表 td 值求和
- vb.net - 无法无限退出while循环
- android - 将实现下载到 jar 文件并将其用作 android studio 中的离线库
- php - 从文件名复制并插入文件
- python - NoModuleError .....持久
- emacs - 如何在 Emacs 中绑定“双档”按键
- python - PyQt - 如何将标签从编辑窗口链接和更新到我的主窗口