키별로 팬더 그룹별로 데이터 프레임에 액세스하는 방법
키별로 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.core.groupby.DataFrameGroupBy
내가 원하는 DataFrame에 해당하는 메소드가없는 것처럼 보이는 이상한 일이 발생합니다.
내가 생각할 수있는 최선은
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
그러나 팬더가 보통 이런 것들에 얼마나 좋은지 고려하면 이것은 불쾌합니다.
이 작업을 수행하는 기본 제공 방법은 무엇입니까?
다음 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 객체에서 이미 사용 가능한 데이터 구조를 사용하기 때문입니다.
그룹화를 사용하여 다른 열을 선택할 수 있습니다.
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
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
오히려
gb.get_group('foo')
나는 사용하는 것을 선호합니다 gb.groups
df.loc[gb.groups['foo']]
이 방법으로 여러 열을 선택할 수도 있기 때문입니다. 예를 들면 다음과 같습니다.
df.loc[gb.groups['foo'],('A','B')]
gb = df.groupby(['A'])
gb_groups = grouped_df.groups
선택적 groupby 객체를 찾고 있다면 gb_groups.keys ()를 수행하고 원하는 key를 다음 key_list에 입력하십시오.
gb_groups.keys()
key_list = [key1, key2, key3 and so on...]
for key, values in gb_groups.iteritems():
if key in key_list:
print df.ix[values], "\n"
I was looking for a way to sample a few members of the GroupBy obj - had to address the posted question to get this done.
create groupby object
grouped = df.groupby('some_key')
pick N dataframes and grab their indicies
sampled_df_i = random.sample(grouped.indicies, N)
grab the groups
df_list = map(lambda df_i: grouped.get_group(df_i), sampled_df_i)
optionally - turn it all back into a single dataframe object
sampled_df = pd.concat(df_list, axis=0, join='outer')
참고URL : https://stackoverflow.com/questions/14734533/how-to-access-pandas-groupby-dataframe-by-key
'development' 카테고리의 다른 글
bash를 사용하면 표준 오류를 다른 프로세스에 어떻게 파이프 할 수 있습니까? (0) | 2020.07.10 |
---|---|
멤버 함수 내 람다 캡처 목록에서 멤버 변수 사용 (0) | 2020.07.09 |
`npm build`는 package.json에서“build”라는 스크립트를 실행하지 않습니다. (0) | 2020.07.09 |
속성 대 방법 (0) | 2020.07.09 |
비동기 프로그래밍과 병렬 프로그래밍의 차이점을 분명히 표현하는 방법은 무엇입니까? (0) | 2020.07.09 |