我有一列熊猫数据框,其中一列是小地理区域的名称。我制定了一套规则,定义了这些区域中的哪些区域属于较大的区域。由于每条规则都是一个条件,因此我尝试使用np.select,但我总是遇到错误。
这是我尝试过的:
Okanagan_and_Kootenays = ['Columbia-Shuswap','Central Okanagan', 'North Okanagan', 'Okanagan-Similkameen', 'East Kootenay', 'Kootenay Boundary','Central Kootenay' ]
conditions = [(main_file['long_name'] == Okanagan_and_Kootenays)]
choices = 'Okanagan_and_Kootenays'
main_file['_area_large'] = np.select(conditions, choices)
我每次都会收到以下错误消息:
ValueError: Arrays were different lengths: 1412 vs 7
答案 0 :(得分:1)
如果我理解正确,那么您想使用.isin()
,并使用np.select
,您的选择应该是一个与conditions
列表长度相同的可迭代(列表):
Okanagan_and_Kootenays = ['Columbia-Shuswap','Central Okanagan', 'North Okanagan',
'Okanagan-Similkameen', 'East Kootenay', 'Kootenay Boundary',
'Central Kootenay' ]
conditions = [(main_file['long_name'].isin(Okanagan_and_Kootenays))]
choices = ['Okanagan_and_Kootenays']
main_file['_area_large'] = np.select(conditions, choices)
答案 1 :(得分:0)
在这种情况下,我不确定np.select
是最有效的方法。如果您有很多大区域,您打算做什么?循环真的会很慢。
您可以考虑以下方法:
import pandas as pd
dct = {"area1": ["town1", "town2", "town3"],
"area2": ["town4", "town5", "town6", "town7"]}
df = pd.DataFrame({"town": sum([dct[k] for k,v
in dct.items()],
[])})
inv_dct = {}
for k, vs in dct.items():
for v in vs:
inv_dct[v] = k
df["area"] = df["town"].map(inv_dct)