首页 > 解决方案 > 如何在 Pandas 数据框的一列中计算一维数组中的值的数量

问题描述

我有一个数据框,在某些行中,对于其中一列,我有一个一维数组。例如: 图。1

我如何计算每一行的列数据(用逗号分隔)中数组中的值的数量,并在新数据框的新列中显示它们的数量,如图 2 所示:

图2

标签: pythonpandasdataframenumpy

解决方案


您可以使用.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

推荐阅读