我创建了这样的数据框
df_gr_1971 = df.where(df.year == 1971).groupby(['year', 'ID1', 'ID2']).size().unstack(fill_value='0')
list_all71 = [(list(i), v) for i, v in df_gr_1971.stack().iteritems()]
list_all71 = pd.DataFrame(list_all71, columns=["ID3", "count"])
list_all71
cols = ['year', 'ID1', 'ID2']
s = df.where(df.year == 1971).groupby(cols).size().unstack(fill_value='0').stack()
L = [{'year_1971': idx[0], 'ID3': list(idx[1:]), 'count': vals} for idx, vals in s.items()]
df_list_all71 = pd.DataFrame(L)
df_list_all71
结果是这样的
ID3 count year_1971
0 [11, B6] 2 1971.0
1 [11, H1] 1 1971.0
2 [11, H2] 1 1971.0
3 [24, B6] 1 1971.0
4 [24, H1] 0 1971.0
当我想显示计数 == 0 的行时,我使用此代码
wsp_71 = df_list_all71[df_list_all71['count']==0]
wsp_71
但是结果是这样的。
ID3 count year
但我想看到这个结果
ID3 count year_1971
4 [24, H1] 0 1971.0
有什么想法可以解决这个问题吗?或者我误解了什么?
最佳答案
存在问题fill_value='0'
- 对于不存在的值分配字符串'0'
,因此需要:
.unstack(fill_value=0)
<小时/>
理论上解决方案应该是按字符串'0'
过滤,但不建议将数字与字符串混合:
df_list_all71[df_list_all71['count']=='0']
关于python - pandas - 检索使用 unstack 函数提取的数据时出现问题用 0 填充空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53465647/