我有一个很大的CSV文件,结构如下:
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实现它。例如,对于上面的数据,我想:
doc_id included excluded
1 1 3
2 3 0
...这是我当前的代码:
for index, row in citationData.iterrows():
if row.included == True:
inc = inc + 1
else:
exc = exc + 1发布于 2018-08-01 06:53:04
您可以使用pd.crosstab。
res = pd.crosstab(df['doc_id'], df['inclusion'])
print(res)
inclusion False True
doc_id
1 3 1
2 0 3通常,在处理Pandas / NumPy数组时,应该避免Python级别的循环。
发布于 2018-08-01 06:53:35
您可以使用Counter进行agg
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,只需使用默认构造函数即可。
pd.DataFrame(s.tolist(), index=s.index).fillna(0)
FALSE TRUE
doc_id
1 3 1
2 0 3https://stackoverflow.com/questions/51623054
复制相似问题