gpt4 book ai didi

python - 使用 Pandas 到 "applymap"并访问索引/列?

转载 作者:行者123 更新时间:2023-12-01 03:28:35 25 4
gpt4 key购买 nike

解决以下 Pandas 问题的最有效方法是什么?
这是一个简化的示例,其中包含数据框中的一些数据:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=['a','b','c','d'],
index=np.random.randint(0,10,size=10))
此数据如下所示:
   a  b  c  d
1 0 0 9 9
0 2 2 1 7
3 9 3 4 0
2 5 0 9 4
1 7 7 7 2
6 4 4 6 4
1 1 6 0 0
7 8 0 9 3
5 0 0 8 3
4 5 0 2 4
现在我想应用一些功能 f到数据帧中的每个值(例如下面的函数),并获取一个数据帧作为结果输出。棘手的部分是 我正在应用的函数取决于我当前位于 的索引的值.
def f(cell_val, row_val):
"""some function which needs to know row_val to use it"""
try:
return cell_val/row_val
except ZeroDivisionError:
return -1
通常,如果我想对数据框中的每个单独的单元格应用一个函数,我只需调用 .applymap()f .即使我必须传入第二个参数(在本例中为“row_val”),如果参数是固定数字,我也可以编写一个 lambda 表达式,例如 lambda x: f(x,i)在哪里 i是我想要的固定数字。但是,我的第二个参数取决于我当前从中调用函数的数据框中的行,这意味着我不能只使用 .applymap() .
我将如何有效地解决这样的问题?我可以想到几种方法来做到这一点,但没有一个觉得“正确”。我可以:
  • 遍历每个单独的值并一个一个地替换它们,但这看起来真的很尴尬而且很慢。
  • 创建一个包含(单元格值,行值)元组的完全独立的数据框并使用内置的 pandas applymap()在我的元组数据框中。但这似乎很老套,我还创建了一个完全独立的数据框作为额外的步骤。
  • 必须有一个更好的解决方案(一个快速的解决方案将不胜感激,因为我的数据框可能会变得非常大)。
  • 最佳答案

    IIUC 你可以使用 div axis=0另外,您需要转换 Index反对 Series对象使用 to_series :

    In [121]:
    df.div(df.index.to_series(), axis=0).replace(np.inf, -1)

    Out[121]:
    a b c d
    1 0.000000 0.000000 9.000000 9.000000
    0 -1.000000 -1.000000 -1.000000 -1.000000
    3 3.000000 1.000000 1.333333 0.000000
    2 2.500000 0.000000 4.500000 2.000000
    1 7.000000 7.000000 7.000000 2.000000
    6 0.666667 0.666667 1.000000 0.666667
    1 1.000000 6.000000 0.000000 0.000000
    7 1.142857 0.000000 1.285714 0.428571
    5 0.000000 0.000000 1.600000 0.600000
    4 1.250000 0.000000 0.500000 1.000000

    此外,除以零导致 inf您需要调用 replace -1 替换这些行

    关于python - 使用 Pandas 到 "applymap"并访问索引/列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39773833/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com