让我们说我有一个像这样的数据框:
group_cols = ['Group1', 'Group2', 'Group3']
df = pd.DataFrame([['A', 'B', 'C', 54.34],
['A', 'B', np.nan, 61.34],
['B', 'A', 'C', 514.5],
['B', 'A', 'A', 765.4],
['A', 'B', 'D', 765.4]],
columns=(group_cols+['Value']))
Group1 Group 2 Group 3 Value
A B C 54.34
A B nan 61.34
B A C 514.5
B A A 765.4
A B D 765.4
当我在这3列上进行分组时,nan行以某种方式被删除/删除。 理想情况下,我希望保留组合(在这种情况下为A,B和nan)。因此,我的输出中应该有单独的一行。但是它掉了。
df2 = df.groupby(['Group1', 'Group2', 'Group3'],as_index=False).sum()
Group1 Group 2 Group 3 Value
A B C 54.34
A B D 765.4
B A A 765.4
B A C 514.5
要解决此问题,我可以填充一些值,然后进行分组以使我看到那里的行,但是我觉得这不是理想的解决方案。
请您分享我如何保留南行?
答案 0 :(得分:1)
这是在fillna
之前移至groupby
的一种方法,因为groupby将自动删除NaN
df.fillna('NaN',inplace=True)
df2 = df.groupby(['Group1', 'Group2', 'Group3'],as_index=False).sum()
df2
Group1 Group2 Group3 Value
0 A B C 54.34
1 A B D 765.40
2 A B NaN 61.34
3 B A A 765.40
4 B A C 514.50
来自文档:http://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html
> NA和NaT组处理
如果其中有任何NaN或NaT值 分组密钥,这些将被自动排除。换一种说法, 永远不会有“ NA组”或“ NaT组”。这不是 较早版本的熊猫就是这种情况,但用户通常会丢弃 无论如何,NA组(并支持它是一个实施 头痛)。