【问题标题】:Populate pandas dataframe using column and row indices as variables使用列和行索引作为变量填充 pandas 数据框
【发布时间】:2019-06-01 13:27:48
【问题描述】:

概述

如何使用使用列和行索引作为变量的数学来填充 pandas 数据框。

设置

import pandas as pd
import numpy as np

df = pd.DataFrame(index = range(5), columns = ['Combo_Class0', 'Combo_Class1', 'Combo_Class2', 'Combo_Class3', 'Combo_Class4'])

目标

df 中的每个单元格 = 行索引 * (列索引 + 2)

尝试 1

您可以使用this 解决方案生成以下代码:

row = 0
for i in range(5):
    row = row + 1
    df.loc[i] = [(row)*(1+2), (row)*(2+2), (row)*(3+2), (row)*(4+2), (row)*(4+2), (row)*(5+2)]

尝试 2

This 解决方案似乎也很相关,尽管我相信我已经读过您不应该遍历数据帧。此外,我没有看到如何遍历行 和 列:

for i, j in df.iterrows(): 
    df.loc[i] = i

【问题讨论】:

    标签: python pandas dataframe data-munging


    【解决方案1】:

    您可以利用broadcasting 获得更有效的方法:

    ix = (df.index+1).to_numpy() # .values for pandas 0.24< 
    df[:] = ix[:,None] * (ix+2)
    

    print(df)
    
            Combo_Class0  Combo_Class1  Combo_Class2  Combo_Class3  Combo_Class4
    0             3             4             5             6             7
    1             6             8            10            12            14
    2             9            12            15            18            21
    3            12            16            20            24            28
    4            15            20            25            30            35
    

    【讨论】:

    • 这会返回错误AttributeError: 'RangeIndex' object has no attribute 'to_numpy'。很好奇您是如何打印结果的……
    • 是的,我确实在评论中提到使用 .values 用于 0.24 以下的熊猫版本。使用.values 而不是to_numpy @PizzaAndCode
    • 啊,我的大脑误解了你的评论,现在说得通了。使用 ,values() 可以完美运行。极好的!感谢您的跟进@yatu。这是一个更通用的解决方案,因此将其标记为已接受的答案。
    【解决方案2】:

    使用multiplyouter

    df[:]=np.multiply.outer((np.arange(5)+1),(np.arange(5)+3))
    

    【讨论】:

    • Python 数据分析第二版 (ISBN 978-1-491-95766-0),第 473 页包含与此类似的代码。谢谢分享!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2021-07-17
    • 2021-11-22
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多