Pandas DataFrame Groupby使用by = series中的np.nan进行操作

时间:2014-08-21 02:47:29

标签: python pandas

我最近遇到了一个大型数据集中的情况,其中我的一个groupby系列包含一些np.nan值。这会导致观察结果从结果表中删除。在高维情况下(> 100,000行),这有时难以识别,这导致系统的数据丢失。我现在变得更专注于我的groupby项目,并使用最小索引信息来识别sum()之前的唯一案例。

一个简单的例子:

import pandas as pd
import numpy as np 
tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',
                     'foo', 'foo', 'qux', 'qux'],
                     [np.nan, np.nan, 'one', 'two',
                     'one', 'two', 'one', 'two']]))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
np.random.seed(1234)
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])

生成以下DataFrame

untitled

执行GroupBy操作时

df2 = df.reset_index()
df2.groupby(['first', 'second']).sum()
#OR
df.groupby(level=['first', 'second']).sum()

我们得到了结果DataFrame

untitled

这从default的角度来看是很有道理的(由于信息不完整),但是选择不丢弃bar并保留数据是很好的,在这种情况下会返回original dataframe

这种情况出现在我的数据中,因为我有一个冗余的索引项,在MultiIndex的较低级别没有变化,所以我认为它不会很好(因为它很好保留在数据集中作为另一个索引项的不同表示形式:它是FullCountryNameISO3C代码),但是我发现因为它没有在一个国家/地区的情况下定义它因此被删除结果数据框中的那个国家(没有任何警告)。

有没有办法实现这个结果?

如果由于warning在任何级别存在而导致群组丢弃,则可能会发出np.nan

更新

这可能会使其更清晰:

import pandas as pd
import numpy as np
tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',
                     'foo', 'foo', 'qux', 'qux',],
                     ['one', 'two', 'one', 'two',
                     'one', 'two', 'one', 'two'],
                     [np.nan, np.nan, 'one', 'two', 
                      'one', 'two', 'one', 'two']]))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second', 'third'])
np.random.seed(1234)
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])

生成以下数据框

enter image description here

然后

df.groupby(level=['first', 'second', 'third']).sum()

产生

enter image description here

third级别在groupby的唯一性中并不重要。

0 个答案:

没有答案