簡體   English   中英

熊貓按列計數值的頻率

[英]Pandas Count frequency of values by column

我正在嘗試使用Python / Pandas將我通常在R中容易完成的一些操作應用於以下示例數據集。

S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
QUER.MAC 9 8 3 5 6 0 5 0 0 0
QUER.VEL 8 9 8 7 0 0 0 0 0 0
CARY.OVA 6 6 2 7 0 2 0 0 0 0
PRUN.SER 3 5 6 6 6 4 5 0 4 1
QUER.ALB 5 4 9 9 7 7 4 6 0 2
JUGL.NIG 2 0 0 0 3 5 6 4 3 0
QUER.RUB 3 4 0 6 9 8 7 6 4 3
JUGL.CIN 0 0 5 0 2 0 0 2 0 2
ULMU.AME 2 2 4 5 6 0 5 0 2 5
TILI.AME 0 0 0 0 2 7 6 6 7 6
ULMU.RUB 4 0 2 2 5 7 8 8 8 7
CARY.COR 0 0 0 0 0 5 6 4 0 3
OSTR.VIR 0 0 0 0 0 0 7 4 6 5
ACER.SAC 0 0 0 0 0 5 4 8 8 9

從文本文件讀取數據后

import numpy as np
import pandas as pd
df = pd.read_csv("sample.txt", header=0, index_col=0, delimiter=' ')

我想要:(1)獲得每一列的值的頻率大於零; (2)獲取每一列的值之和; (3)在每一列中找到最大值。

我設法獲得(2)

N = df.apply(lambda x: np.sum(x))

但是無法弄清楚如何實現(1)和(3)。

我需要不依賴於列名的通用解決方案,因為我想將這些操作應用於任意數量的相似矩陣(當然,它們將具有不同的標簽和列/行數)。

在此先感謝您的任何提示和建議。

你的第一

df.gt(0).sum()

第二名

df.sum()

第三名

df.max()

您可以使用maskdescribe來按列獲取大量統計信息。

df.mask(df <= 0).describe().T

輸出:

     count      mean       std  min   25%  50%   75%  max
S1     9.0  4.666667  2.549510  2.0  3.00  4.0  6.00  9.0
S2     7.0  5.428571  2.439750  2.0  4.00  5.0  7.00  9.0
S3     8.0  4.875000  2.642374  2.0  2.75  4.5  6.50  9.0
S4     8.0  5.875000  2.031010  2.0  5.00  6.0  7.00  9.0
S5     9.0  5.111111  2.368778  2.0  3.00  6.0  6.00  9.0
S6     9.0  5.555556  1.878238  2.0  5.00  5.0  7.00  8.0
S7    11.0  5.727273  1.272078  4.0  5.00  6.0  6.50  8.0
S8     9.0  5.333333  2.000000  2.0  4.00  6.0  6.00  8.0
S9     8.0  5.250000  2.314550  2.0  3.75  5.0  7.25  8.0
S10   10.0  4.300000  2.540779  1.0  2.25  4.0  5.75  9.0

使用mask的原因是count對所有非NaN值進行計數,因此將任何<或=屏蔽為0將使NaN成為count

最后,我們也可以使用assign添加“ sum”:

df.mask(df<=0).describe().T.assign(sum=df.sum())

輸出:

     count      mean       std  min   25%  50%   75%  max  sum
S1     9.0  4.666667  2.549510  2.0  3.00  4.0  6.00  9.0   42
S2     7.0  5.428571  2.439750  2.0  4.00  5.0  7.00  9.0   38
S3     8.0  4.875000  2.642374  2.0  2.75  4.5  6.50  9.0   39
S4     8.0  5.875000  2.031010  2.0  5.00  6.0  7.00  9.0   47
S5     9.0  5.111111  2.368778  2.0  3.00  6.0  6.00  9.0   46
S6     9.0  5.555556  1.878238  2.0  5.00  5.0  7.00  8.0   50
S7    11.0  5.727273  1.272078  4.0  5.00  6.0  6.50  8.0   63
S8     9.0  5.333333  2.000000  2.0  4.00  6.0  6.00  8.0   48
S9     8.0  5.250000  2.314550  2.0  3.75  5.0  7.25  8.0   42
S10   10.0  4.300000  2.540779  1.0  2.25  4.0  5.75  9.0   43

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM