试图了解最好的想法/做法是什么。.我在不同位置都有一个带有访调员的数据框。.我想创建一个字典或某种数据结构来保存访调员的姓名,然后保存每个坐标我们要接受他们的采访我正在使用的数据框的示例如下:
interview longitude latitude
1 A1 34.2 90.2
2 A1 54.2 23.5
6 A1 NaN NaN
7 A2 NaN NaN
8 A2 NaN NaN
9 A2 23.1 38.2
10 A2 -23.7 -98.4
我实际上希望有一个字典,其中包含“ A1”,并且包含(34.2,90.2),(54.2,23.5),而“ A2”将包含(23.1,39.2),(-23.7,-98.4)。
location_dict = {}
for name, group in df.groupby('Interviewer'):
minidf = group[['Interviewer','Longitude','Latitude']].dropna()
for index, row in minidf.iterrows():
location_dict[name]=(row['Longitude'], row['Latitude'])
我的逻辑有点过时,但是我没有任何“附加”到字典的方法,所以我的字典仅输出迭代的最后一次迭代中的数据...我将如何解决这个问题?
答案 0 :(得分:1)
使用groupby
的一种解决方案:
def zipper(row):
return list(zip(row['longitude'], row['latitude']))
res = df.dropna(subset=['longitude', 'latitude'])\
.groupby('interview').apply(zipper).to_dict()
# {'A1': [(34.2, 90.2), (54.2, 23.5)],
# 'A2': [(23.1, 38.2), (-23.7, -98.4)]}
另一个使用collections.defaultdict
:
from collections import defaultdict
res = defaultdict(list)
for row in df.dropna(subset=['longitude', 'latitude']).itertuples(index=False):
res[row.interview].append((row.longitude, row.latitude))
由于defaultdict
是dict
的子类,因此通常不需要进一步的操作。