为了账号安全,请及时绑定邮箱和手机立即绑定

pandas df 与 groupby 一起听写

pandas df 与 groupby 一起听写

天涯尽头无女友 2023-10-31 17:11:29
我有这个 df :line stop1    1_a 1    1_b 1    1_c2    2_a2    2_c我想创建以下字典:d={1 : {"stops" : "1_a","1_b","1_c"}, 2 : {"stops" : "2_a","2_b","2_c"}}有人知道如何用to_dict方法做到这一点吗?谢谢 !
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

DataFrame.groupby您可以创建由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]}}


查看完整回答
反对 回复 2023-10-31
?
DIEA

TA贡献1820条经验 获得超2个赞

您可以避免该to_dict部分并迭代分组以获取字典,因为您没有进行任何计算:


{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']}}


查看完整回答
反对 回复 2023-10-31
  • 2 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信