我有以下数据框:
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)
然后它将为数据框中的每一行返回字典。
但是我如何将其应用于数据框,以使其不会返回奇怪的结果。
答案 0 :(得分:1)
Dataframe.apply为每一行(或每一列)运行该函数。 这就是为什么您会获得多个词典的原因。
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}
希望这会有所帮助。