如何通过键访问Groupby对象中相应的Groupby数据框?
使用以下groupby:
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
'B': rand.randn(6),
'C': rand.randint(0, 20, 6)})
gb = df.groupby(['A'])
我可以迭代它来获取密钥和组:
In [11]: for k, gp in gb:
print 'key=' + str(k)
print gp
key=bar
A B C
1 bar -0.611756 18
3 bar -1.072969 10
5 bar -2.301539 18
key=foo
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
我想能够访问一个组的关键:
In [12]: gb['foo']
Out[12]:
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
但是当我试着用gb[('foo',)]
这样做时,我得到了一个奇怪的pandas。果心群比。DataFrameGroupBy
对象,它似乎没有任何与我想要的数据帧对应的方法。
我能想到的最好的办法是:
In [13]: def gb_df_key(gb, key, orig_df):
ix = gb.indices[key]
return orig_df.ix[ix]
gb_df_key(gb, 'foo', df)
Out[13]:
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
但是考虑到熊猫在这些事情上通常有多好,这有点令人讨厌。
这样做的内置方法是什么?
而不是
gb.get_group('foo')
我更喜欢用gb.groups
df.loc[gb.groups['foo']]
因为这样你也可以选择多列。例如:
df.loc[gb.groups['foo'],('A','B')]
Python for Data Analysis中的Wes McKinney(熊猫的作者)提供了以下配方:
groups = dict(list(gb))
它返回一个字典,其键是您的组标签,其值是DataFrames,即。
groups['foo']
将产生您想要的:
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
您可以使用get_group
方法:
In [21]: gb.get_group('foo')
Out[21]:
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
注意:这不需要为每个组创建每个子数据帧的中间字典/副本,因此将比使用dict(iter(gb))
创建简单字典更节省内存。这是因为它使用groupby对象中已有的数据结构。
您可以使用Groupby切片选择不同的列:
In [22]: gb[["A", "B"]].get_group("foo")
Out[22]:
A B
0 foo 1.624345
2 foo -0.528172
4 foo 0.865408
In [23]: gb["C"].get_group("foo")
Out[23]:
0 5
2 11
4 14
Name: C, dtype: int64
我正在使用从h5文件加载的调查数据作为通过熊猫包。在此中,所有行都是单个调查的结果,而列是单个调查中所有问题的答案。 我的目标是将此数据集缩减为更小的,仅包括在某个问题上具有某个描述答案的行,即在本列中具有相同的值。我能够确定具有此条件的所有行的索引值,但我找不到如何删除这些行或仅使用这些行创建新的df。
问题内容: 如何通过密钥访问groupby对象中的相应groupby数据帧? 通过以下groupby: rand = np.random.RandomState(1) df = pd.DataFrame({‘A’: [‘foo’, ‘bar’] * 3, ‘B’: rand.randn(6), ‘C’: rand.randint(0, 20, 6)}) gb = df.groupby([‘A’])
我想过滤熊猫DataFrame,它从DataFrame中过滤掉除值中声明的行之外的所有其他列。我如何才能做到这一点并获得预期输出。 预期输出:
假设我有2个数据帧: DF1: Col1 | Col2 | Col3 XCN000370/17-18C|XCN0003711718C|0003971718 DF2 Col1 | Col2 | Col3 XCN0003711718C|XCN0003711718C|0003971718 我希望它们像这样合并: 首次匹配Col1(DF1)和Col1(DF2) 在保持不匹配的情况下,将Col1(DF1)与
我对访问中的数据的几种方法进行了比较。请参阅下面的结果。最快的访问是在上使用方法。在这篇文章中提到了我。 令我惊讶的是,通过访问比通过底层的 numpy 对象 访问更快。 我的问题是,有没有一种方法可以像我通过< code>get_value访问熊猫数据帧一样快速地访问numpy数组的元素? 10000个回路,最佳3:108µs/回路 最慢的运行时间是最快的5.42倍。这可能意味着正在缓存中间结果
问题内容: 要按单列过滤数据帧(df),如果我们考虑男性和女性的数据,则可以: 问题1-但是,如果数据跨越多年并且我只想看2014年的男性,该怎么办? 用其他语言,我可能会做类似的事情: (除了我要执行此操作,并在新的数据框对象中获取原始数据框的子集) 问题2。如何循环执行此操作,并为每个唯一的年份和性别集创建一个数据框对象(例如,2013-男,2013-女,2014-男和2014-女的df 问题