Pandas groupby输出不显示空值

2024-06-25 22:51:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图根据两列来映射值的出现。它工作得很好,多亏了马库斯在这个post。但是,我也希望它为没有计数的事件显示一个0(其中rating字段为空)。它当前忽略空值。在

电流输出为:
enter image description here

如您所见,没有出现Critical,因此它们没有显示出来。我需要它显示0,如果那些环境/评级在数据帧中没有出现。在

我想要的输出是:
enter image description here

基本上,我希望评分(比如Critical和othersp3)始终显示,这样即使没有Critical或Others的条目,对于该环境,它也会显示为0。在

以下是当前代码:
csvfile = pd.read_csv("rawstats.csv", encoding = "ISO-8859-1", usecols=['Environment/s Affected', 'Rating'])
df = pd.DataFrame(csvfile)
df.groupby(['Environment/s Affected', (df['Rating'].isin(['1', '2']))]).size().rename(index={True: 'Critical', False: 'Others P3+'}, level=1).to_csv('summary.csv')

示例数据:
Rating,Environment/s Affected 3,Env1 3,Env1 3,Env1 3,Env2 3,Env2 3,Env2 3,Env2 3,Env3 3,Env3 3,Env3 3,Env3 3,Env3 3,Env4 3,Env4 3,Env4 3,Env4 3,Env4 3,Env4 4,Test5 4,Test5 4,Test5 4,Test5 4,Test5 4,Test5 4,Test5 ,Env1 ,Env1 ,Env3 ,Env4 ,Env1

谢谢!在


Tags: csv数据csvfiledfenvironment环境ratingothers
2条回答

groupby不会显示NaN值,您需要先将它们替换为一个伪值:

In [11]: df = pd.DataFrame([[1, 2], [3, 4], [pd.np.nan, 6]], columns=["A", "B"])

In [12]: df
Out[12]:
     A  B
0  1.0  2
1  3.0  4
2  NaN  6

In [13]: df.groupby("A").mean()  # no nulls
Out[13]:
     B
A
1.0  2
3.0  4

例如,可以使用-1:

^{pr2}$

您需要^{}by MultiIndexby ^{}的第一级唯一值的所有组合:

s = (df.groupby(['Environment/s Affected', 
                 (df['Rating'].isin(['1', '2']))]).size()
       .rename(index={True: 'Critical', False: 'Others P3+'}, level=1))
print (s)
Environment/s Affected  Rating    
Env1                    Others P3+    6
Env2                    Others P3+    4
Env3                    Others P3+    6
Env4                    Others P3+    7
Test5                   Others P3+    7
dtype: int64

mux = pd.MultiIndex.from_product([df['Environment/s Affected'].unique(),
                                 ['Others P3+', 'Critical']],
                                 names=['Environment/s Affected','Rating'])
print (mux)
MultiIndex(levels=[['Env1', 'Env2', 'Env3', 'Env4', 'Test5'], ['Critical', 'Others P3+']],
           codes=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4], [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]],
           names=['Environment/s Affected', 'Rating'])

df1 = s.reindex(mux, fill_value=0).reset_index(name='counts')
print (df1)
  Environment/s Affected      Rating  counts
0                   Env1  Others P3+       6
1                   Env1    Critical       0
2                   Env2  Others P3+       4
3                   Env2    Critical       0
4                   Env3  Others P3+       6
5                   Env3    Critical       0
6                   Env4  Others P3+       7
7                   Env4    Critical       0
8                  Test5  Others P3+       7
9                  Test5    Critical       0

如果需要Critical在最后一行添加^{}

^{pr2}$

相关问题 更多 >