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

标签 python python-3.x pandas python-applymap

解决以下 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/

    相关文章:

    python - 如何从这个亚马逊模板中提取平均星级?(python,网络抓取)

    python - 为什么我在使用 Twitter Rest API 时收到此错误

    python - 如何对列表中元素的所有实例进行索引、删除和计数?

    python - 这个语法叫什么? (int)(value) 与 int(value) 相同

    python - 使用加法 (+) 运算符连接系列?

    python - 使用扭曲将文件读取到标准输出

    python - 如何将二维数组转为一维数组?

    python - 如何将以下函数应用于多个txt文件?

    python - 由于 pandas.io.common 未在 1.0.x 中导入 is_url 而导致 Pandas read_csv 错误

    python - 使用 Python 创建一个简单的网页,其中模板内容是根据查询从数据库(或 pandas 数据框)填充的