2 回答

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊
DataFrame.groupby
您可以創(chuàng)建由with?apply
、 thenSeries.to_frame
和 last列表填充的嵌套字典DataFrame.to_dict
:
d = df.groupby('line')['stop'].apply(list).to_frame().to_dict('index')
print (d)
{1: {'stop': ['1_a', '1_b', '1_c']}, 2: {'stop': ['2_a', '2_c']}}
如果需要通過某些分隔符連接值,例如,:
d1 = df.groupby('line')['stop'].apply(','.join).to_frame().to_dict('index')
print (d1)
{1: {'stop': '1_a,1_b,1_c'}, 2: {'stop': '2_a,2_c'}}
編輯:
GroupBy.agg
帶有和 省略的多列的解決方案to_frame()
:
print (df)
? ?line stop? lat? lon
0? ? ?1? 1_a? ? 2? ? 2
1? ? ?1? 1_b? ? 3? ? 1
2? ? ?1? 1_c? ? 4? ? 3
3? ? ?2? 2_a? ? 5? ? 6
4? ? ?2? 2_c? ? 6? ? 6
d = df.groupby('line')[['stop','lat','lon']].agg(list).to_dict('index')
print (d)
{1: {'stop': ['1_a', '1_b', '1_c'], 'lat': [2, 3, 4], 'lon': [2, 1, 3]},
?2: {'stop': ['2_a', '2_c'], 'lat': [5, 6], 'lon': [6, 6]}}

TA貢獻(xiàn)1820條經(jīng)驗 獲得超3個贊
您可以避免該to_dict部分并迭代分組以獲取字典,因為您沒有進(jìn)行任何計算:
{key: {"stops": ",".join(value.stop.array)}
for key, value in df.groupby("line")}
{1: {'stops': '1_a,1_b,1_c'}, 2: {'stops': '2_a,2_c'}}
或者您可以將子值保留為列表:
{key: {"stops": list(value.stop.array)}
for key, value in df.groupby("line")}
{1: {'stops': ['1_a', '1_b', '1_c']}, 2: {'stops': ['2_a', '2_c']}}
添加回答
舉報