Pandas Merge-열 중복을 방지하는 방법
두 데이터 프레임 간의 병합을 시도하고 있습니다. 각 데이터 프레임에는 두 가지 인덱스 수준 (날짜, cusip)이 있습니다. 예를 들어 열에서 일부 열은 둘 (통화, 수정 날짜)간에 일치합니다.
인덱스별로 병합하는 가장 좋은 방법은 무엇입니까?하지만 두 개의 통화 및 수정 날짜를 사용하지 않는 것입니다.
각 데이터 프레임은 90 열이므로 모든 것을 손으로 작성하지 않으려 고 노력하고 있습니다.
df: currency adj_date data_col1 ...
date cusip
2012-01-01 XSDP USD 2012-01-03 0.45
...
df2: currency adj_date data_col2 ...
date cusip
2012-01-01 XSDP USD 2012-01-03 0.45
...
만약 내가한다면:
dfNew = merge(df, df2, left_index=True, right_index=True, how='outer')
나는 얻다
dfNew: currency_x adj_date_x data_col2 ... currency_y adj_date_y
date cusip
2012-01-01 XSDP USD 2012-01-03 0.45 USD 2012-01-03
감사합니다! ...
하나의 데이터 프레임에만있는 열을 해결하고이를 사용하여 병합에서 열의 하위 집합을 선택할 수 있습니다.
cols_to_use = df2.columns - df.columns
그런 다음 이것을 사용하여 병합을 수행하십시오 (이것은 인덱스 객체이지만 편리한 tolist()
방법이 있습니다)
dfNew = merge(df, df2[cols_to_use], left_index=True, right_index=True, how='outer')
이렇게하면 병합시 열이 충돌하지 않습니다.
버전 0.15 이상에서 새로운 기본 구문은 다음과 같습니다.
cols_to_use = df2.columns.difference(df.columns)
감사합니다 @odedbd
다음에서 suffixes
옵션을 사용합니다 .merge()
.
dfNew = df.merge(df2, left_index=True, right_index=True,
how='outer', suffixes=('', '_y'))
그런 다음 "_y"플래그를 기준으로 열을 필터링 할 수 있습니다. 즉, 삭제할 수 있습니다.
저는 Pandas를 처음 접했지만 _x 또는 _y가있는 열 이름을 자동으로 피하고 중복 데이터를 제거하여 동일한 결과를 얻고 싶었습니다. 드디어이 사용하여 한 대답 이 하나의 유래에서을
sales.csv
도시; 주; 단위 멘 도시 노; CA; 1 덴버; CO; 4 오스틴; TX; 2
수익 .csv
branch_id; city; revenue; state_id 10; 오스틴; 100; TX 20; 오스틴; 83; TX 30; 오스틴; 4; TX 47; 오스틴; 200; TX 20; 덴버; 83; CO 30; 스프링 필드; 4; I
merge.py 가져 오기 팬더
def drop_y(df):
# list comprehension of the cols that end with '_y'
to_drop = [x for x in df if x.endswith('_y')]
df.drop(to_drop, axis=1, inplace=True)
sales = pandas.read_csv('data/sales.csv', delimiter=';')
revenue = pandas.read_csv('data/revenue.csv', delimiter=';')
result = pandas.merge(sales, revenue, how='inner', left_on=['state'], right_on=['state_id'], suffixes=('', '_y'))
drop_y(result)
result.to_csv('results/output.csv', index=True, index_label='id', sep=';')
병합 명령을 실행할 때 _x
접미사를 빈 문자열로 바꾸고 다음으로 끝나는 열을 제거 할 수 있습니다._y
output.csv
id; 도시; 주; 단위; branch_id; 수익; state_id 0; 덴버; CO; 4; 20; 83; CO 1;Austin;TX;2;10;100;TX 2;Austin;TX;2;20;83;TX 3;Austin;TX;2;30;4;TX 4;Austin;TX;2;47;200;TX
ReferenceURL : https://stackoverflow.com/questions/19125091/pandas-merge-how-to-avoid-duplicating-columns
'development' 카테고리의 다른 글
파이썬에서 setattr () 사용 (0) | 2021.01.09 |
---|---|
출력을 변수로 업데이트 (0) | 2021.01.09 |
Android Studio의 xcrun 개발자 경로 변경 (0) | 2021.01.09 |
Ansible에서 이중 중괄호 이스케이프 (0) | 2021.01.09 |
Angular2에 의한 링크에 "안전하지 않은"접두사를 추가하지 않는 방법은 무엇입니까? (0) | 2021.01.09 |