首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在条件下填充大熊猫细胞的有效方法

在条件下填充大熊猫细胞的有效方法
EN

Stack Overflow用户
提问于 2021-12-29 23:06:38
回答 2查看 512关注 0票数 1

我有一只熊猫数据,格式如下:

代码语言:javascript
运行
复制
  col1 col2
0    a    A
1    a
2    a    A
3    a
4    b
5    b
6    c    A
7    c

我想搜索col1值,这些值至少具有N对应的col2 == 'A'值。在这种情况下,我希望用col2列中的其他相应单元格填充'A's。

让我们看一个具体的例子。让我们假设N=1。在这种情况下,我们检查col2中是否至少有一个col1值。对于col1='a'col2中有两个'A',因此这种情况符合条件。因此,让我们用col2中的索引1和3填充'A's。接下来,我们看到对于col1='b'col2中没有'A's,因此这里不需要填充任何内容。最后,我们发现对于col1='c'col2中正好有一个'A'。由于这也符合条件,我们将在col2中用'A'填充索引7。

类似地,当N阈值设置为2时,新的'A's只会添加到col2中索引1和3的行,而不会添加到最后一行(索引7)。

我假设可能有一种高效的、矢量化的方法来解决这个问题。现在,我只能考虑迭代dataframe,对于有10s数千行的原始数据集,它不能很好地扩展。

这就是我到目前为止尝试过的。这适用于N=1案例,尽管我没有设法将其推广到任何N阈值,更不用说如何更好地实现它了:

代码语言:javascript
运行
复制
df = df.sort_values(['col1','col2'], ascending=[True,False]).reset_index(drop=True)
for idx, row in df.iloc[1:,:].iterrows():
    if df.loc[idx,'col1'] == df.loc[idx-1,'col1'] and df.loc[idx,'col2']=='' and df.loc[idx-1,'col2']!='':
        df.loc[idx,'col2'] = df.loc[idx-1,'col2']

复制数据的代码:

代码语言:javascript
运行
复制
df = pd.DataFrame(
    [['a','A'],['a',''],['a','A'],['a',''],['b',''],['b',''],['c','A'],['c','']], 
    columns=['col1','col2']
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-29 23:22:55

这就是你要找的吗?

代码语言:javascript
运行
复制
N = 1
value = 'A'

df.loc[df.groupby('col1')['col2'].transform(lambda x: sum(x == value) >= N), 'col2'] = value

print(df)

  col1 col2
0    a    A
1    a    A
2    a    A
3    a    A
4    b     
5    b     
6    c    A
7    c    A

..。然后和N = 2 ..。

代码语言:javascript
运行
复制
  col1 col2
0    a    A
1    a    A
2    a    A
3    a    A
4    b     
5    b     
6    c    A
7    c     
票数 6
EN

Stack Overflow用户

发布于 2021-12-29 23:58:57

以下是避免lambda函数的解决方案:

代码语言:javascript
运行
复制
N = 1
V = 'A'

df['col2'] = df['col1'].map(df.groupby('col1')['col2'].value_counts().swaplevel()[V].ge(N).map({True:V})).fillna('')

输出:

代码语言:javascript
运行
复制
>>> df
  col1 col2
0    a    A
1    a    A
2    a    A
3    a    A
4    b     
5    b     
6    c    A
7    c    A
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70525911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档