python - 如何将函数应用于 pandas 数据框?

标签 python pandas

我尝试将函数应用于像这样的 pandas 数据框

fogo = intervalo.resample('D', how = ['max']).TMP
fogo['Tmin'] = intervalo.resample('D', how = ['min']).TMP
fogo['Rain'] = intervalo.resample('D', how = ['sum']).RNF
fogo.columns = ['TMax','TMin','Rain']
fogo['Fogo'] = (fogo['TMax']>24) \
        | ((fogo['TMax']>21) & (fogo['TMin']>12)) \
        | ((fogo['TMax']>18) & (fogo['TMin']>10) & (fogo['Rain']>2))

def f(x):    
if (fogo['TMax']>24):
    return 'a'
elif ((fogo['TMax']>21) & (fogo['TMin']>12)):
    return 'b'
elif ((fogo['TMax']>18) & (fogo['TMin']>10) & (fogo['Rain']>2)):
    return 'c'

fogo['Causa'] = fogo.apply(f, axis=1)


    TMax    TMin    Rain    Fogo            Causa
2012-04-01   21.6    10.3    0.8     False    empty
2012-04-02   19.3    9.5     0.0     False    empty
2012-04-03   16.2    10.1    0.2     False    empty
2012-04-04   16.7    11.4    0.2     False    empty
2012-04-05   14.0    5.9     2.9     False    empty

但它返回以下错误

'The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

你能帮我吗?

谢谢

雨果

最佳答案

因此,代码中的第一个问题是您正在调用 apply 并设置参数 axis=1 这会按行应用您的函数,这很好。

但是,在您的函数中,当您调用fogo['TMax'] > 24时,您正在引用整个数据帧,这就是为什么您在逐行应用函数但随后尝试引用整个数据帧时收到错误的原因所以很困惑。

所以你可以将你的函数更改为:

def f(x):    
    if (x['TMax']>24):
        return 'a'
    elif ((x['TMax']>21) & (x['TMin']>12)):
        return 'b'
    elif ((x['TMax']>18) & (x['TMin']>10) & (x['Rain']>2)):
        return 'c'

但是,由于您只是为 3 个不同的条件设置三个值,因此您可以使用 bool 索引来创建掩码,然后设置满足您的条件的所有行。

所以:

fogo.loc[fogo['TMax']> 24,'Causa'] = 'a'
fogo.loc[(fogo['TMax']> 21) & (fogo['TMin'] > 12),'Causa'] = 'b'
fogo.loc[(fogo['TMax']> 18) & (fogo['TMin'] > 10) & (fogo['Rain'] > 2),'Causa'] = 'c'

这比逐行迭代要快得多,特别是对于大型数据帧。

因此,根据您的示例数据,我可以这样做:

In [10]:

fogo.loc[fogo['TMax']> 21,'Causa'] = 'a'
fogo.loc[(fogo['TMax']> 21) & (fogo['TMin'] > 11),'Causa'] = 'b'
fogo.loc[(fogo['TMax']> 11) & (fogo['TMin'] > 5) & (fogo['Rain'] > 2),'Causa'] = 'c'
fogo
Out[10]:
            TMax  TMin  Rain   Fogo  Causa
2012-04-01  21.6  10.3   0.8  False      a
2012-04-02  19.3   9.5   0.0  False  empty
2012-04-03  16.2  10.1   0.2  False      b
2012-04-04  16.7  11.4   0.2  False      b
2012-04-05  14.0   5.9   2.9  False      c

[5 rows x 5 columns]

关于python - 如何将函数应用于 pandas 数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940760/

相关文章:

python - "execfile"不能正常工作

python - 从具有不同非整数索引的大小不等的列表对象创建数据帧

python - 在 pandas dataframe 中环绕索引进行切片的好方法

python - Python 中标记化数据的有效数据结构是什么?

python - 如何解决 'The column label ' Avg_Threat_Score' is not unique.'? Pandas 问题

python - 根据数字和组 ID 扩展 pandas 数据框行 (Python 3)。

python - Windows 上 Python 3.6 中的原始套接字数据包嗅探器

python - 使用 python 创建与 excel 兼容的 CSV 文件?

python - cv2.waitkey(1) 未在 opencv python 中运行

python - 反向传播会发生在标签中是什么意思?