gpt4 book ai didi

python - 计算Python中另一个数据帧中每组数据帧中具有特定模式的元素数量

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:19 25 4
gpt4 key购买 nike

我正在尝试计算一个数据框中一组的元素数量,并将其分配给另一个数据框中的另一列,基于第二个数据框中某一列的某些条件。

这是我需要更新的第一个数据框:

node   name       count
1 aaa-1-1
1 trg-3-4-5
2 bbb-2-2-4
3 ccc-3-3

这是我将用来计算值的数据框

node  name 
1 Empty-1-1-1
1 Empty-1-1-2
1 Empty-1-1-3
2 gbn-2-3-5
3 Empty-3-3-9

我应该从 df1 中的名称进行过滤,并计算 df1 中具有相同 id 且具有字符串“EMPTY”和 df1 的 1-1 部分的元素数量,因此输出将如下所示

id   name       count
1 aaa-1-1 3
1 trg-3-4-5 0
2 bbb-2-2-4 0
3 ccc-3-3 1

为此,我附加了两个数据帧,然后按 id 分组,并在每个组循环,以获取计数

        df = df1.append(df2, ignore_index=True, sort=True)
for _, gdf in df.groupby('node'):
cds = gdf[gdf.name.str.count('-') == 2]
count_map = {}
for i, c in cds.iterrows():
k = c.name.split('-', 1)[-1] + '-'
count_map[i] = gdf[gdf.name.str.contains('EMPTY-' + k)].shape[0]
for kk, vv incount_map.items():
df.loc[kk, 'count'] = vv
return df

这个函数可以工作并为我提供正确的结果,但需要很长时间。我尝试合并两个数据框,然后根据另一列对一列进行计数,但合并没有给我预期的记录,有什么方法可以优化此功能

编辑:

拥有两个数据框并在它们之间进行搜索对于大型数据集来说非常昂贵,因此我使用了 megred 到数据框并创建了 daskdata 框架,其中我按“节点”分组,现在我的搜索会更容易,所以我现在拥有的是:

df_partioined:

     node    name1        name2              count
1 . aaa-1-1 . nan
1 . trg-3-4-5 nan
1 . nan Empty-1-1-3
1 . nan . Empty-1-1-1
1 nan Empty-1-1-2

现在,在 name1 列中,我将过滤掉仅包含两个破折号的名称所以对于这种情况将是 1-1,然后计算具有该字符串的元素数量

所以我的预期输出是

     node    name1        name2              count
1 . aaa-1-1 . nan 3
1 . trg-3-4-5 nan 0
1 . nan Empty-1-1-3 nan
1 . nan . Empty-1-1-1 nan
1 nan Empty-1-1-2 nan

我将 1-1 拆分为新列,但不确定下一步应该如何做:(

最佳答案

试试这个:

 df['count'] = df['name'].apply(lambda x: df1['name'].str.contains(pd.Series(x).str.extract(r'(?:(\d-\d.*))$')[0][0]).sum())

输出

   node       name  count
0 1 aaa-1-1 3
1 1 trg-3-4-5 0
2 2 bbb-2-2-4 0
3 3 ccc-3-3 1

关于python - 计算Python中另一个数据帧中每组数据帧中具有特定模式的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59278892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com