python - 用 Pandas 计算大数据中的条目

标签 python pandas

我正在使用制表符分隔的文件:

A    B    C    D
a    d    ii   do 
a    d    g    do
a    h    g    do
a    i    k    mo
c    i    k    mo
c    g    ii   mo
v    g    p    do

我想计算第一列中的每个条目以及第二、第三和第四列中的所有相关条目,例如:

a 4 d 2 h 1 i 1 ii 1 k 1 domain 3 motif 1
c 2 i 1 g 1 k 1 ii 1 motif 2 
v 1 g 1 p 1 motif 1

我正在尝试通过这些命令使用 python pandas 对这些数据进行排序:

df = pd.read_csv('file.txt', delimiter= '\t', names = ['A', 'B', 'C', 'D']) 
df1.groupby(['a', 'c', 'd', 'e']).count()

但它没有返回所需的结果。

最佳答案

import pandas as pd
df = pd.DataFrame({'A': ['a', 'a', 'a', 'a', 'c', 'c', 'v'],
                   'B': ['d', 'd', 'h', 'i', 'i', 'g', 'g'],
                   'C': ['ii', 'g', 'g', 'k', 'k', 'ii', 'p'],
                   'D': ['domain', 'domain', 'domain', 'motif', 
                         'motif', 'motif', 'domain']})

melted = pd.melt(df, id_vars='A')
count = melted.groupby(['A', 'value'])['value'].count()
result = count.unstack(fill_value=0)
result['A'] = df.groupby('A')['A'].count()
print(result)

产量

value  d  domain  g  h  i  ii  k  motif  p  A
A                                            
a      2       3  2  1  1   1  1      1  0  4
c      0       0  1  0  1   1  1      2  0  2
v      0       1  1  0  0   0  0      0  1  1

解释:

  • 使用 pd.melt将所有列(A 列除外)合并为一列:

    In [517]: melted = pd.melt(df, id_vars='A'); melted
    Out[517]: 
        A variable   value
    0   a        B       d
    1   a        B       d
    2   a        B       h
    3   a        B       i
    4   c        B       i
    ...
    
  • 然后你可以groupby/count Avalue 列:

    In [520]: count = melted.groupby(['A', 'value'])['value'].count(); count
    Out[520]: 
    A  value 
    a  d         2
       domain    3
       g         2
       h         1
    ...
    
  • count.unstack('value')value 索引级别移动到列索引级别:

    In [522]: count.unstack('value', fill_value=0)
    Out[522]: 
    value  d  domain  g  h  i  ii  k  motif  p
    A                                         
    a      2       3  2  1  1   1  1      1  0
    c      0       0  1  0  1   1  1      2  0
    v      0       1  1  0  0   0  0      0  1
    

关于python - 用 Pandas 计算大数据中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37635867/

相关文章:

python - 如何避免双轴的两个图例重叠?

javascript - 创建一个 html 表单并使用 javascript 访问其中的 python 脚本?

python - Pandas 中数据帧子集的随机样本

Python脚本无法执行SQL Select语句

python - 如何计算数据框字段中字符串出现的次数?

python - 如何从 Python 中的 2 个词典创建字典?

python - 使用 numpy 用调色板中最接近的颜色替换图像中的颜色

python - 仅从 Xpath 中获取一部分文本

python - 在 Pandas 中使用数组值创建 JSON 键

python - 如何将 Pandas 数据透视表转换为数据框