首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个文档处理CSV包含的记录

每个文档处理CSV包含的记录
EN

Stack Overflow用户
提问于 2018-08-01 06:35:32
回答 2查看 22关注 0票数 0

我有一个很大的CSV文件,结构如下:

代码语言:javascript
复制
doc_id, inclusion, id
 1, TRUE, 842
 1, FALSE, 768
 1, FALSE, 292
 1, FALSE, 393
 2, TRUE, 191
 2, TRUE, 389
 2, TRUE, 171
 ...

id是主键。doc_id是一个外部变量,表示每个id所链接的文档。多个id链接到每个文档。每个id都被分类为包含的(即inclusion == True)或排除(即inclusion == False)。

我需要创建一个汇总表,为每个doc_id显示包含和排除的id的数量。我可以为所有的doc_id执行此操作,但不确定如何为每个doc_id实现它。例如,对于上面的数据,我想:

代码语言:javascript
复制
doc_id included excluded
1      1        3
2      3        0
...

这是我当前的代码:

代码语言:javascript
复制
for index, row in citationData.iterrows():
    if row.included == True:
        inc = inc + 1
    else:
        exc = exc + 1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-01 06:53:04

您可以使用pd.crosstab

代码语言:javascript
复制
res = pd.crosstab(df['doc_id'], df['inclusion'])

print(res)

inclusion  False  True 
doc_id                 
1              3      1
2              0      3

通常,在处理Pandas / NumPy数组时,应该避免Python级别的循环。

票数 1
EN

Stack Overflow用户

发布于 2018-08-01 06:53:35

您可以使用Counter进行agg

代码语言:javascript
复制
from collections import Counter

s = df.groupby('doc_id').inclusion.agg(Counter)

doc_id
1    {' TRUE': 1, ' FALSE': 3}
2                 {' TRUE': 3}
Name: inclusion, dtype: object

如果需要dataframe,只需使用默认构造函数即可。

代码语言:javascript
复制
pd.DataFrame(s.tolist(), index=s.index).fillna(0)

         FALSE  TRUE
doc_id      
1        3      1
2        0      3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51623054

复制
相关文章

相似问题

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