У меня есть панд dataframe с колоннами IssuerId
и Sedol
. IssuerId
в некоторых случаях будет одинаковым, но Sedol
всегда будет другим.
Я хотел бы создать словарь или многоуровневый индекс, который объединяет их так, чтобы я мог легко их пройти. Например, у меня сейчас есть:
IssuerID Sedol
1 1
1 2
2 3
3 4
И я хочу как-то создать:
[{1: [1,2]},{2: 3},{3:4}]
Использование groupby
l=[{x:y.tolist()}for x , y in df.groupby('IssuerID')['Sedol']]
l
[{1: [1, 2]}, {2: [3]}, {3: [4]}]
Если вы выполните groupBy
+ apply(list)
и затем to_dict
, вы получите:
d = df.groupby("IssuerID")["Sedol"].apply(list).to_dict()
print(d)
#{1: [1, 2], 2: [3], 3: [4]}
Теперь просто переформатируйте d
чтобы получить желаемый результат.
Если вы хотите словарь, используйте понимание слова:
new_dict = {k: v if len(v) > 1 else v[0] for k, v in d.items()}
print(new_dict)
#{1: [1, 2], 2: 3, 3: 4}
Если вы хотите список словарей, используйте понимание списка:
new_list = [{k: v if len(v) > 1 else v[0]} for k, v in d.items()]
print(new_list )
#[{1: [1, 2]}, {2: 3}, {3: 4}]
[{1: [1,2]},{2: 3},{3:4}]
?