V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
badacook
V2EX  ›  Python

pandas DataFrame

  •  
  •   badacook · 40 天前 · 1012 次点击
    这是一个创建于 40 天前的主题,其中的信息可能已经有所发展或是发生改变。
    列数据
    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 直接实现的函数,还望大家不吝赐教,谢谢了
    8 条回复    2021-03-26 15:25:23 +08:00
    a342191555
        1
    a342191555   40 天前 via iPhone
    popil1987
        2
    popil1987   40 天前 via Android
    好像没有,可以用 Python 的 combination 函数
    princelai
        3
    princelai   40 天前
    一楼的方法应该可以,笛卡尔积对应的是 product

    ```
    from itertools import product
    pd.DataFrame(product(col1.to_list(),col2.to_list(),col3.to_list()))
    ```
    yuankui
        4
    yuankui   40 天前
    python 不清楚,java 或者 js 可以用 flatmap
    princelai
        5
    princelai   40 天前
    @princelai #3 哦对了,不引入别的包,只用 pandas 也可以实现,使用 MultiIndex 就行了

    ```
    pd.MultiIndex.from_product([col1.to_list(),col2.to_list(),col3.to_list()]).to_frame(index=None)
    ```
    maloneleo88
        6
    maloneleo88   40 天前 via Android
    借楼问问 openpyxl 怎么附加写入某列,在不知道此列行长度的情况下🦉
    badacook
        7
    badacook   40 天前
    @a342191555
    @princelai
    非常感谢 两位的指点 非常 nice
    dongxiao
        8
    dongxiao   40 天前
    ```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)
    ```
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   769 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 22:13 · PVG 06:13 · LAX 15:13 · JFK 18:13
    ♥ Do have faith in what you're doing.