我有一个庞大的犯罪统计数据库(" 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)
现在是我陷入困境的部分。我现在需要编写一个能完成两件事的函数:
编辑:
我使用了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
答案 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)
您还应该能够:
df[(df > df.mean()).all(1)]