pandas DataFrame

2021-03-26 08:59:00 +08:00
 badacook
列数据
col1 = pd.Series(['a', 'b'])
col2 = pd.Series(['x', 'y'])
col3 = pd.Series(['1', '2'])

pandas 的 DataFrame
col1 col2 col3
a x 1
a x 2
a y 1
a y 2
b x 1
b x 2
b y 1
b y 2

想请教一下大家 pandas 能否用 上面的列数据,生成 下面的 DataFrame 二维表,有别于筛选和交、差、并、补,不知道有没有,pandas 直接实现的函数,还望大家不吝赐教,谢谢了
1926 次点击
所在节点    Python
8 条回复
a342191555
2021-03-26 09:08:45 +08:00
popil1987
2021-03-26 09:10:04 +08:00
好像没有,可以用 Python 的 combination 函数
princelai
2021-03-26 10:01:06 +08:00
一楼的方法应该可以,笛卡尔积对应的是 product

```
from itertools import product
pd.DataFrame(product(col1.to_list(),col2.to_list(),col3.to_list()))
```
yuankui
2021-03-26 10:14:49 +08:00
python 不清楚,java 或者 js 可以用 flatmap
princelai
2021-03-26 10:24:18 +08:00
@princelai #3 哦对了,不引入别的包,只用 pandas 也可以实现,使用 MultiIndex 就行了

```
pd.MultiIndex.from_product([col1.to_list(),col2.to_list(),col3.to_list()]).to_frame(index=None)
```
maloneleo88
2021-03-26 10:27:54 +08:00
借楼问问 openpyxl 怎么附加写入某列,在不知道此列行长度的情况下🦉
badacook
2021-03-26 10:55:33 +08:00
@a342191555
@princelai
非常感谢 两位的指点 非常 nice
dongxiao
2021-03-26 15:25:23 +08:00
```python

col1 = pd.Series(['a', 'b'])
col2 = pd.Series(['x', 'y'])
col3 = pd.Series(['1', '2'])

col1, col2, col3 = map(pd.DataFrame, [col1, col2, col3])
col1.index = [1 for _ in range(len(col1))]
col2.index = [1 for _ in range(len(col2))]
col3.index = [1 for _ in range(len(col3))]

r = (
col1
.join(col2, how="outer", lsuffix="_col1", rsuffix="_col2")
.join(col3, how="outer")
)
r.columns = ["col1", "col2", "col3"]

print(r)
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765240

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX