将函数应用于

2024-04-26 14:59:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将函数GetPermittedFAR映射到我的dataframe(df),这样我就可以测试col zonedist1==某个值,我就可以构建新的col,比如df['FAR_Permitted']等等

我试过各种各样的map()等方法,但都没有成功。我觉得这应该是一件很简单的事情?你知道吗

理想情况下,我会使用一个简单的list/lambda,因为我有许多这样的测试条件值,这些值会导致col数据的创建。你知道吗

import pandas as pd
import numpy as np

def GetPermittedFAR():
    if df['zonedist1'] == 'R7-3':
        df['FAR_Permitted'] = 0.5
        df['Building Height Max'] = 35

    if df['zonedist1'] == 'R3-2':
       df['FAR_Permitted'] = 0.5
       df['Building Height Max'] = 35

    if df['zonedist1'] == 'R1-1':
       df['FAR_Permitted'] = 0.7
       df['Building Height Max'] = 100
    #etc...if statement for each unique value in 'zonedist'

df = pd.DataFrame({'zonedist1':['R7-3', 'R3-2', 'R1-1', 
                               'R1-2', 'R2', 'R2A', 'R2X',
                               'R1-1','R7-3','R3-2','R7-3',
                               'R3-2', 'R1-1', 'R1-2'
                                ]}

df = df.apply(lambda x: GetPermittedFAR(), axis=1)

Tags: lambdaimportdfifcolmaxr3far
2条回答

pd.merge()怎么样?你知道吗

df成为您的数据帧

In [612]: df
Out[612]:
  zonedist1
0      R7-3
1      R3-2
2      R1-1
3      R1-2
4        R2
5       R2A
6       R2X

merge是另一个有条件的数据帧

In [613]: merge
Out[613]:
  zonedist1  FAR_Permitted  Building Height Max
0      R7-3            0.5                   35
1      R3-2            0.5                   35

然后,将dfmerge合并到“left”

In [614]: df.merge(merge, how='left')
Out[614]:
  zonedist1  FAR_Permitted  Building Height Max
0      R7-3            0.5                   35
1      R3-2            0.5                   35
2      R1-1            NaN                  NaN
3      R1-2            NaN                  NaN
4        R2            NaN                  NaN
5       R2A            NaN                  NaN
6       R2X            NaN                  NaN

稍后可以替换NaN值。你知道吗

这两种解决方案都非常出色。我想得太多了。向熊猫的力量致敬!我不清楚哪种回答方式更好,但合并似乎更直截了当。非常感谢你们。你知道吗

相关问题 更多 >