Ho通过在pandas数据帧上应用函数来获取/返回单个字典

时间:2018-07-17 06:30:36

标签: python pandas dictionary dataframe

我有以下数据框:

state  city     alt_city
FL  FT. PIERCE  FORT PIERCE
FL  FT. PIERCE  FORTPIERCE
FL  FT. PIERCE  FT.PIERCE
FL  FORT PIERCE FORTPIERCE
FL  FORT PIERCE FT PIERCE
FL  FORT PIERCE FT. PIERCE
FL  FORT PIERCE FT.PIERCE
FL  FORT PIERCE FTPIERCE
AK  ANCHORAGE   ANCH
AK  ANCHORAGE   ANCHORAGE

并且我想根据某些条件从中生成字典:

以下是伪代码:

def map_df_to_dict(d,state,city,alt_city):
    key1 = (state,city)
    val1 = alt_city
    key2 = (state,alt_city)
    val2 = city
    if key1 in d:
        d[key1].append(val1)
    else:
        d[key1] = []
        d[key1].append(val1)
    if key2 in d:
        d[key2].append(val2)
    else:
        d[key2] = []
        d[key2].append(val2)
    return d

如果我使用以下代码将其应用于数据框:

cs_d = {}
cs_dict = df.apply(lambda x: map_df_to_dict(cs_d,x['state'],x['city'],x['alt_city']), axis=1)

然后它将为数据框中的每一行返回字典。

但是我如何将其应用于数据框,以使其不会返回奇怪的结果。

2 个答案:

答案 0 :(得分:1)

Dataframe.apply为每一行(或每一列)运行该函数。 这就是为什么您会获得多个词典的原因。

link

DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)

沿DataFrame的输入轴应用功能。

传递给函数的对象是具有DataFrame索引(axis = 0)或列(axis = 1)索引的Series对象。

参数:func:应用于每个列/行的功能

答案 1 :(得分:0)

您可以通过在功能范围之外“全局”声明字典来获得单个字典。考虑下面的伪代码,将pandas系列中的每个数字加2。

test_a = pd.Series([1,2,3])
global_dict = {}

def add_2(x):
    global_dict[x] = (x+2)

在test_a上应用此函数时,得到以下结果:

test_a.apply(add_2)
print(global_dict)

global_dict = {1:3,2:4,3:3:5}

希望这会有所帮助。

相关问题