用于识别数据帧中哪些行超过"的意思"为列

时间:2017-01-15 15:52:27

标签: python function pandas dataframe mean

我有一个庞大的犯罪统计数据库(" crimeData.csv"),其中列是犯罪类别,行是发生犯罪的地址。因此,数据是给定地址的犯罪实例数。

我把它放到了Pandas Dataframe中:

import os
import pandas as pd
relativePath=os.getcwd()
dataFilePath=relativePath+"/Resources/crimeData.csv"
data = pd.read_csv(dataFilePath)
df = pd.DataFrame(data)

我需要计算每种犯罪类别的MEAN发生次数(我的df中的列)。我在这做了:

df.mean(axis=0)

现在是我陷入困境的部分。我现在需要编写一个能完成两件事的函数:

  1. 确定给定地址的每个类别的犯罪数量是否超过平均数,
  2. 打印每个类别满足条件1的地址
  3. 编辑:

    我使用了Ted的建议,试图突出显示高于平均值的细胞:

    import os
    import pandas as pd
    import numpy as np
    relativePath=os.getcwd()
    dataFilePath=relativePath+"/Resources/crimeData.csv"
    data = pd.read_csv(dataFilePath)
    df = pd.DataFrame(data)
    df.mean(axis=0)
    df.style.apply(lambda x: np.where(x > df.mean(), 'background-color: green', ''), axis=1)
    df
    

    这似乎不会导致数据框发生任何变化。仍然没有突出显示。我错过了什么????

    编辑#2:

    这是数据帧的标题:

                         Address  ARSON   ASSAULT   BAD CHECKS   BRIBERY  \
    0         OAK ST / LAGUNA ST      0         0            0         0   
    1  VANNESS AV / GREENWICH ST      0         1            0         0   
    2   1500 Block of LOMBARD ST      0         8            0         0   
    3  100 Block of BRODERICK ST      0         2            1         0   
    4        0 Block of TEDDY AV      0         9            0         0   
    

1 个答案:

答案 0 :(得分:0)

将列地址放在索引中。

df = df.set_index('Address')

您应该能够使用pandas where方法使所有值小于平均值null,然后使用dropna

删除行
df.where(df > df.mean()).dropna()

这是一个示例,我创建了一个10列,2行的随机数在0到1之间的数据帧。只保留两列大于列平均值的行。

np.random.seed(1)
df = pd.DataFrame(np.random.rand(10,2))
df.where(df > df.mean()).dropna()

          0         1
0  0.417022  0.720324
4  0.396767  0.538817
5  0.419195  0.685220
8  0.417305  0.558690

另外检查原始DataFrame,我们可以突出显示大于均值的单元格。有两个绿色单元格的行是我们想要的那些。

df.style.apply(lambda x: np.where(x > df.mean(), 'background-color: green', ''), axis=1)

enter image description here

您还应该能够:

df[(df > df.mean()).all(1)]