有两列,按照其中的一列分组,对另一列统计,转为list形式

描述:有两列,按照其中的一列分组,对另一列统计,转为list形式

#自定义数据
x1=np.random.randint(10,size=(20,1))
x2=np.random.randint(10,size=(20,1))
y=np.random.random(size=(20,1))
a=pd.DataFrame(np.c_[x1,x2,y],columns=['did_x','didx_2','dis'])
a.did_x=a.did_x.astype(int)
a.didx_2=a.didx_2.astype(int)
a

在这里插入图片描述

第一种:分组聚合方式
#分组聚合方式 
a.groupby(['did_x']).agg({'didx_2':list}).reset_index()
第二种:形成字典方式

往往字典在实际中能解决很多问题,而且很灵活,我们重点掌握字典的一些用法
-------------------------------------------------------------------------------
setdefault接受一个键和一个默认值,并返回关联值,如果没有当前值,则返回默认值。
在本例中,我们将获得一个空的或已填充的列表,然后将当前值追加到该列表中

#第一种方式
dic={}
for x in range(len(a)):
    dic.setdefault(a.iloc[x,0],[]).append(a.iloc[x,1])

输出:
在这里插入图片描述

#字典转为Series然后转为DF  就能得到结果
pd.Series(dic).to_frame().reset_index().rename(columns={'index':'did_x',0:'didx_2'})

-------------------------------------------------------------------------------

#第二种方式
#先将dataframe两列数据转为list
data=a[['did_x','didx_2']].values.tolist()

from collections import defaultdict
ss=defaultdict(list)#defaultdict(list, {})
for i,j in data:
    ss[i].append(j)

输出:
在这里插入图片描述
-------------------------------------------------------------------------------

# 第三种方式
dict1={}
for i ,j in data:
    try:
        dict1[i].append(j)
    except KeyError:
        dict1[i]=[j]

在这里插入图片描述

## 第四种方式 not in 
dict2={}
for x in data:
    key=x[0]
    if key not in dict2:
        dict2[key]=[]
    dict2[key].append(x[1])
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elvis_hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值