여기에 더미 데이터 프레임이 있습니다.
import pandas as pd
df = pd.DataFrame({'Date':[2019-08-06,2019-08-08,2019-08-01,2019-10-12], 'Name':['A','A','B','C'], 'Type':['X','Y','Y','Z']})
3 개 잠재적 가치가 있습니다 Type
--- W, X, Y, ZI는 누락 된 한 쌍 찾으려 Name
- Type
'날짜 값이있는 행 삽입 및 채우기0000-00-00'
따라서이 예에서 A, B, C는 모두 W / B 유형이없고 C에는 X / C에는 Y / A가없고 B에는 Z가 없습니다.
따라서 Date로 8 행을 추가해야합니다. 0000-00-00
요약하자면 내가해야 할 일은 ---
두 열의 누락 된 쌍을 찾고 다른 특정 행을 더미 값으로 채 웁니다.
편집 --- 아래 솔루션에서 ValueError를 발견했기 때문에 더미 데이터 프레임을 편집했습니다.
import pandas as pd
df = pd.DataFrame({'Date':[2019-08-06,2019-08-07,2019-08-08,2019-08-01,2019-10-12], 'Name':['A','A','A','B','C'], 'Type':['X','X','Y','Y','Z']})
MultiIndex.from_product
에 MultiIndex.levels
전달 된 열의 모든 조합의 수준에서 사용 DataFrame.reindex
:
df = df.set_index(['Name','Type'])
df = df.reindex(pd.MultiIndex.from_product(df.index.levels), fill_value='0000-00-00')
print (df)
Date
Name Type
A X 2019-08-06
Y 2019-08-08
Z 0000-00-00
B X 0000-00-00
Y 2019-08-01
Z 0000-00-00
C X 0000-00-00
Y 0000-00-00
Z 2019-10-12
EDIT : 오류 ValueError:cannot handle a non-unique multi-index!
수단은 중복 쌍있다 Name
, Type
데이터 프로세싱을위한 해결책은 :
df = pd.DataFrame({'Date':['2019-08-06','2019-08-08','2019-08-01','2019-10-12'],
'Name':['A','A','B','C'],
'Type':['X','X','Y','Z'],
'col':list('abcd')})
print (df)
Date Name Type col
0 2019-08-06 A X a
1 2019-08-08 A X b <-duplicated pair `A, X` - Name, Type
2 2019-08-01 B Y c
3 2019-10-12 C Z d
해결책은 먼저 중복을 제거 하고 모든 조합에 DataFrame.duplicated
적용 reindex
하는 것입니다.
mask = df.duplicated(['Name','Type'])
df1 = df[~mask].set_index(['Name','Type'])
df1 = (df1.reindex(pd.MultiIndex.from_product(df1.index.levels))
.fillna({'Date':'0000-00-00', 'col':'missing'}).reset_index())
print (df1)
Name Type Date col
0 A X 2019-08-06 a
1 A Y 0000-00-00 missing
2 A Z 0000-00-00 missing
3 B X 0000-00-00 missing
4 B Y 2019-08-01 c
5 B Z 0000-00-00 missing
6 C X 0000-00-00 missing
7 C Y 0000-00-00 missing
8 C Z 2019-10-12 d
그리고 마지막으로 모든 중복 행을 concat
다음 과 같이 추가하십시오 .
df = pd.concat([df1, df[mask]]).sort_values(['Name','Type'], ignore_index=True)
print (df)
Name Type Date col
0 A X 2019-08-06 a
1 A X 2019-08-08 b
2 A Y 0000-00-00 missing
3 A Z 0000-00-00 missing
4 B X 0000-00-00 missing
5 B Y 2019-08-01 c
6 B Z 0000-00-00 missing
7 C X 0000-00-00 missing
8 C Y 0000-00-00 missing
9 C Z 2019-10-12 d
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다