2016-03-08 104 views
1

我想功能GetPermittedFAR映射到我的dataframe(df)这样,我可以测试是否在山坳值zonedist1 ==一定值时,我可以建立新的cols如df['FAR_Permitted']应用功能的大熊猫山坳

我曾尝试过各种方式的map()等,但还没有得到这个工作。我觉得这应该是一件非常简单的事情呢?

理想情况下,我会使用一个简单的列表理解/ 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) 
+0

你需要什么确切的输出?你可以发布吗? –

+0

感谢您的回复!有趣的是,也许我正在反思这一点。我试图概括这个问题,可能会忽略一些重要的标准。我将编辑上面的代码。 'zonedist'具有重复值,我需要根据zonedist中的任何值来断言我的数据有2个新列。 – orthogonal

回答

1

怎么样使用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 

另据帧然后,merge上 '左'

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 

以后可以合并df REPL王牌NaN值。

+0

我不确定我是否明白这一点:“将另一个数据框合并为条件”。你是否认为col FAR_permitted实际上可以包含一个条件?你能给这个例子语法吗?我不熟悉,但听起来很神奇! – orthogonal

0

这两种解决方案都很出色。我是从一种直接的pythonic方式来解决这个问题的。祝贺大熊猫的力量!我不清楚哪种方式的答案更好,但.merge看起来更直截了当。非常感谢你。