python - 如何在 Pandas 数据框的一列中计算一维数组中的值的数量
解决方案
您可以使用.str.len()
获取列中列表中的项目计数,data
然后使用.groupby()
聚合相同的计数name
,.sum()
如下所示:
df_out = (df['data'].str.len()
.groupby(df['name'], sort=False).sum()
).to_frame(name='data_count').reset_index()
结果:
print(df_out)
name data_count
0 john 6
1 amanda 0
2 sara 5
编辑
如果该列data
由看起来像数组/列表的字符串组成,而不是问题中提到的一维数组,您可以运行以下代码首先将该列转换为真正的数组/列表:
df['data'] = df['data'].str.strip('[]').str.replace("'", "").str.replace('"', '').replace('', np.nan).str.split(',').fillna({i: [] for i in df.index})
测试运行
测试数据设置
nan = np.nan
# dict of dataframe dump by df.to_dict() as provided by OP in the comment:
data = {'name': {0: 'john', 1: 'amanda', 2: 'sara', 3: 'john'}, 'data': {0: '[a4G, bweQ, fp_dE4]', 1: nan, 2: '[H2dw45, IfC4, bAf23g, Lkfr54-op, a3dLa]', 3: '[Tr45b, kM30, riU91]'}}
df = pd.DataFrame(data)
df['data'] = df['data'].str.strip('[]').str.replace("'", "").str.replace('"', '').replace('', np.nan).str.split(',').fillna({i: [] for i in df.index})
运行解决方案代码
df_out = (df['data'].str.len()
.groupby(df['name'], sort=False).sum()
).to_frame(name='data_count').reset_index()
结果:
print(df_out)
name data_count
0 john 6
1 amanda 0
2 sara 5
推荐阅读
- html - 如何改变
表单标签内的标签颜色? - c# - MsalServiceException:AADSTS500011:找不到名为 https://graph.microsoft.com/v1.0 的资源主体
- c# - 为什么部署后前端和服务器无法通过 websocket 连接
- swift - 在 iOS 14 上检查用户位置权限状态
- python - 在 django 服务器启动后运行一个额外的脚本
- javascript - 打字稿泛型:类型'T'和'number'没有重叠错误
- google-cloud-platform - 缺少偶发事件的 Google Cloud 警报条件
- python - 数据解析和特征工程管道的设计模式
- postgresql - 如何通过 PostgreSQL 中的命令行获取仅转储函数创建和存储过程脚本
- vb.net - 我如何在 Eyeshot Vb.net 中测量文本实体的宽度?