我正在使用制表符分隔的文件:
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
A
和value
列: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/