首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:在DataFrame中,我如何循环遍历一列的所有字符串并检查它们是否出现在另一列中并对它们进行计数?

Python:在DataFrame中,我如何循环遍历一列的所有字符串并检查它们是否出现在另一列中并对它们进行计数?
EN

Stack Overflow用户
提问于 2018-02-15 23:30:41
回答 3查看 301关注 0票数 2

我获得了一个数据文件,希望循环遍历列c2中的所有单元格,并计算每个字符串在另一列c1中出现的次数(如果存在的话)。然后打印结果。

示例df:

代码语言:javascript
复制
id     c1                c2
0      luke skywalker    han solo
1      leia organa       r2d2
2      darth vader       finn
3      han solo          the emporer
4      han solo          c3po
5      finn              leia organa
6      r2d2              darth vader

示例打印结果:

代码语言:javascript
复制
han solo      2
r2d2          1
finn          1
the emporer   0
c3po          0
leia organa   1
darth vader   1

我用朱庇特笔记本和巨蟒和熊猫。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-15 23:35:21

你可以使用一些Numpy魔法。

使用count和广播比较每种组合。

代码语言:javascript
复制
from numpy.core.defchararray import count

c1 = df.c1.values.astype(str)
c2 = df.c2.values.astype(str)

pd.Series(
    count(c1, c2[:, None]).sum(1),
    c2
)

han solo       2
r2d2           1
finn           1
the emporer    0
c3po           0
leia organa    1
darth vader    1
dtype: int64
票数 3
EN

Stack Overflow用户

发布于 2018-02-15 23:34:43

您可以将它们作为category传递,并使用value_counts

代码语言:javascript
复制
df.c1.astype('category',categories=df.c2.tolist()).value_counts(sort=False)
Out[572]: 
han solo       2
r2d2           1
finn           1
the emporer    0
c3po           0
leia organa    1
darth vader    1
Name: c1, dtype: int64

或者你可以

代码语言:javascript
复制
pd.crosstab(df.c2,df.c1).sum().reindex(df.c2,fill_value=0)
Out[592]: 
c2
han solo       2
r2d2           1
finn           1
the emporer    0
c3po           0
leia organa    1
darth vader    1
票数 2
EN

Stack Overflow用户

发布于 2018-02-15 23:53:23

代码语言:javascript
复制
df[c3] = pd.Series([df[c1].count(n) for n in df[c2]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48817935

复制
相关文章

相似问题

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