데이터 프레임별 판다 그룹에 키별로 액세스하는 방법
키에 의한 개체별 그룹의 데이터 프레임으로 해당 그룹에 액세스하려면 어떻게 해야 합니까?
다음 그룹 기준:
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
내가 원하는 데이터 프레임에 해당하는 메소드가 없는 것처럼 보이는 객체.
제가 생각할 수 있는 최선의 방법은:
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
하지만 판다들이 보통 이런 것들을 얼마나 잘하는지를 고려하면, 이것은 좀 고약합니다.
이것을 하는 기본적인 방법은 무엇입니까?
다음 방법을 사용할 수 있습니다.
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))
개체별로 그룹에서 이미 사용할 수 있는 데이터 구조를 사용하기 때문입니다.
그룹을 사용하여 여러 열을 슬라이스하여 선택할 수 있습니다.
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
개체별로 선택적 그룹을 찾는 경우 gb_groups.keys()를 수행하고 다음 key_list에 원하는 키를 입력합니다.
gb_groups.keys()
key_list = [key1, key2, key3 and so on...]
for key, values in gb_groups.items():
if key in key_list:
print(df.ix[values], "\n")
GroupByobj의 멤버 몇 명을 샘플로 채취할 방법을 찾고 있었습니다. 이 작업을 수행하기 위해 게시된 질문을 해결해야 했습니다.
다음을 기준으로 개체별 그룹 생성some_key
기둥.
grouped = df.groupby('some_key')
N개의 데이터 프레임을 선택하고 해당 인덱스를 가져옵니다.
sampled_df_i = random.sample(grouped.indices, N)
집단을 장악합니다.
df_list = map(lambda df_i: grouped.get_group(df_i), sampled_df_i)
선택적으로 - 모든 것을 단일 데이터 프레임 개체로 되돌립니다.
sampled_df = pd.concat(df_list, axis=0, join='outer')
df.groupby('A').get_group('foo')
다음과 같습니다.
df[df['A'] == 'foo']
언급URL : https://stackoverflow.com/questions/14734533/how-to-access-pandas-groupby-dataframe-by-key
'IT' 카테고리의 다른 글
판다 다중 인덱스에 레벨 추가 (0) | 2023.06.12 |
---|---|
ggplot2에서 산점도 행렬(쌍() 등가) 생성 (0) | 2023.06.12 |
사용자를 전달하지 않고 ApiController 작업 내에서 현재 사용자를 가져옵니다.매개 변수로서의 ID (0) | 2023.06.07 |
Android Studio 4.2가 Gradle 표시줄에 서명 보고서를 표시하지 않음 (0) | 2023.06.07 |
ARM 템플릿에서 단일 따옴표를 이스케이프하는 방법 (0) | 2023.06.07 |