Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
熊猫';s应用:第一行重复两次 熊猫1.0.5 Python 3.8.0 Numpy 1.19.0_Python_Pandas_Numpy - Fatal编程技术网

熊猫';s应用:第一行重复两次 熊猫1.0.5 Python 3.8.0 Numpy 1.19.0

熊猫';s应用:第一行重复两次 熊猫1.0.5 Python 3.8.0 Numpy 1.19.0,python,pandas,numpy,Python,Pandas,Numpy,此代码的行为很奇怪: import pandas as pd def calc(row): print(f"Row: {row.to_list()}") result = pd.Series({ "sum1": row.col1 + row.col2, "sum2": row.col2 + row.col3, "sum3": row.col1 + ro

此代码的行为很奇怪:

import pandas as pd

def calc(row):
    print(f"Row: {row.to_list()}")
    result = pd.Series({
        "sum1": row.col1 + row.col2,
        "sum2": row.col2 + row.col3,
        "sum3": row.col1 + row.col3,
    })
    return result
    
df = pd.DataFrame({"col1":[1,2,3], 
                   "col2":[4,5,6], 
                   "col3":[7,8,9]})

df[["sum12", "sum23", "sum13"]] = df.apply(lambda row: calc(row), axis=1)
print(df)
它回来了

Row: [1, 4, 7]
Row: [1, 4, 7]
Row: [2, 5, 8]
Row: [3, 6, 9]

    col1    col2    col3    sum12   sum23   sum13
0    1       4       7       5       11      8
1    2       5       8       7       13     10
2    3       6       9       9       15     12
第一个问题:

为什么第一排要详细阐述两次

第二个问题可能与第一个问题相关:

在我的真实代码中,第一行的细化需要0.15秒(由
time.process\u time()
读取),下面的行在0.53到0.60之间。第一行细化两次,第一次0.15秒,第二次0.55秒


原因可能是什么,因为数据是统一的,所以在
calc()
中只使用
numpy
,并且不涉及任何条件或数据过滤器?

这是
GroupBy.apply
(pandas<0.25)和
df.apply
(pandas<1.1)的已知问题。第一组被评估两次的原因是
apply
想知道它是否可以“优化”计算(如果
apply
接收到numpy或cythonized函数,有时这是可能的)

对于pandas 0.25,此行为已在
GroupBy.apply中修复。看见现在有了熊猫1.1

当1.1退出时,您将能够升级,然后您将只看到第一个组被评估一次:

pd.__version__
# '1.1.0.dev0+2004.g8d10bfb6f'

df[["sum12", "sum23", "sum13"]] = df.apply(lambda row: calc(row), axis=1)
print(df)
Row: [1, 4, 7]
Row: [2, 5, 8]
Row: [3, 6, 9]
   col1  col2  col3  sum12  sum23  sum13
0     1     4     7      5     11      8
1     2     5     8      7     13     10
2     3     6     9      9     15     12

第一个(也是最明显的)问题,你的熊猫版本是什么。新增版本。我正在和最近的人一起工作。该错误似乎尚未完全解决,或者与
无关。谢谢你指出这一点。哎呀,我自己来核实一下:那个链接是给groupby.apply的。谢谢。听起来很合理。但为什么接下来的处决需要更长的时间呢?我使用了一次执行来详细说明计算,然后发现实际循环需要5倍的时间:-(@AlexPoca我不是pandas开发人员,所以你的猜测和我的一样好。这可能与pandas测试代码中可能的快速路径有关。如果第二次时间比第一次短,它也可能与缓存有关。等等。