应用功能的大熊猫山坳
问题描述:
我想功能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)
答
怎么样使用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
答
这两种解决方案都很出色。我是从一种直接的pythonic方式来解决这个问题的。祝贺大熊猫的力量!我不清楚哪种方式的答案更好,但.merge看起来更直截了当。非常感谢你。
你需要什么确切的输出?你可以发布吗? –
感谢您的回复!有趣的是,也许我正在反思这一点。我试图概括这个问题,可能会忽略一些重要的标准。我将编辑上面的代码。 'zonedist'具有重复值,我需要根据zonedist中的任何值来断言我的数据有2个新列。 – orthogonal