ProgramingTip

Python DataFrame 부분 설정

bestdevel 2021. 1. 10. 22:55
반응형

Python DataFrame 부분 설정


R에서 Python으로 전환 중입니다. 방금 Pandas를 사용하기 시작했습니다. 멋지게 부분 집합이있는 R 코드가 있습니다.

k1 <- subset(data, Product = p.id & Month < mn & Year == yr, select = c(Time, Product))

이제 보강에서 일을하고 싶습니다. 이것이 내가 지금까지 얻은 것입니다.

import pandas as pd
data = pd.read_csv("../data/monthly_prod_sales.csv")


#first, index the dataset by Product. And, get all that matches a given 'p.id' and time.
 data.set_index('Product')
 k = data.ix[[p.id, 'Time']]

# then, index this subset with Time and do more subsetting..

나는 결함이있는 방식으로 검증되어 있습니다. 아마도 우아한 해결책이있을 것입니다. 누구든지 누구든지 수 있습니까? 내가 가지고있는 타임 스탬프에서 월과 연도를 추출하고 부분 설정을해야합니다. 아마도이 모든 것을 할 한 줄짜리가있을 것입니다.

k1 <- subset(data, Product = p.id & Time >= start_time & Time < end_time, select = c(Time, Product))

감사합니다.


나는 그것을 가정합니다 TimeProductA의 열입니다 DataFrame, df의 인스턴스이며 DataFrame, 그 다른 변수는 스칼라 값은 다음과 있습니다

지금은 DataFrame인스턴스 를 참조해야 합니다.

k1 = df.loc[(df.Product == p_id) & (df.Time >= start_time) & (df.Time < end_time), ['Time', 'Product']]

&연산자 대 비교 연산자 의 우선 순위 때문에 괄호도 필요 합니다. &오퍼레이터는 차례로 비교 연산자보다 높은 우선 순위가 연산기와 동일한 순위를 수행하는 오버로드 된 비트 연산자입니다.

에서 pandas0.13 새로운 실험 방법을 사용할 수 있습니다. 인수 모듈로 하위 집합과 매우 유사합니다 .DataFrame.query()select

으로 query()당신과 같이 그것을 할 것입니다 :

df[['Time', 'Product']].query('Product == p_id and Month < mn and Year == yr')

다음은 간단한 예입니다.

In [9]: df = DataFrame({'gender': np.random.choice(['m', 'f'], size=10), 'price': poisson(100, size=10)})

In [10]: df
Out[10]:
  gender  price
0      m     89
1      f    123
2      f    100
3      m    104
4      m     98
5      m    103
6      f    100
7      f    109
8      f     95
9      m     87

In [11]: df.query('gender == "m" and price < 100')
Out[11]:
  gender  price
0      m     89
4      m     98
9      m     87

관심있는 최종 쿼리는 다음과 같이 연결하여 비교를 가능하게합니다.

k1 = df[['Time', 'Product']].query('Product == p_id and start_time <= Time < end_time')

R과 더 나은 솔루션을 찾는 사람을 위해 :

df[(df.Product == p_id) & (df.Time> start_time) & (df.Time < end_time)][['Time','Product']]

data.loc또는 query대한 필요는 없지만 조금 길다고 생각합니다.


주어진 열을 []로 감싸서 하위 집합 조건을 사용할 수 있음을 발견했습니다. 예를 들어 [ 'Product', 'Time', 'Year', 'Color'] 열이있는 df가 있습니다.

그리고 2014 년 이전에 만든 제품을 포함하고 싶다고 가정 해 보겠습니다.

df[df['Year'] < 2014]

이 경우 모든 행을 반환합니다. 다른 조건을 추가 할 수 있습니다.

df[df['Year'] < 2014][df['Color' == 'Red']

그런 다음 위의 지시에 따라 원하는 열을 선택하십시오. 예를 들어, 위의 df에 대한 제품 색상 및 키,

df[df['Year'] < 2014][df['Color' == 'Red'][['Product','Color']]

알려진 열 이름으로 빈 데이터 프레임 만들기 :

Names = ['Col1','ActivityID','TransactionID']
df = pd.DataFrame(columns = Names)

csv 에서 데이터 프레임 만들기 :

df = pd.DataFrame('...../file_name.csv')

의 하위 집합에 동적 필터 만들기 dtaframe:

i = 12
df[df['ActivitiID'] <= i]

dtaframe의 필수 열을 하위 집합으로 만드는 동적 필터 만들기

df[df['ActivityID'] == i][['TransactionID','ActivityID']]

참조 URL : https://stackoverflow.com/questions/19237878/subsetting-a-python-dataframe

반응형