나는 희박한 데이터 프레임과 이와 같은 것을 가지고 있습니다.
Conti_mV_XSCI_140|Conti_mV_XSCI_12|Conti_mV_XSCI_76|Conti_mV_XSCO_11|Conti_mV_XSCO_203|Conti_mV_XSCO_75
1 | nan | nan | 12 | nan | nan
nan | 22 | nan | nan | 13 | nan
nan | nan | 9 | nan | nan | 31
보시다시피 XSCI 는 3 개의 헤더 이름에 존재하며, 난수 (_140, _12, _76)가 추가되어 서로 다른 점만 있습니다.
이것은 올바르지 않습니다. 열 이름은 Conti_mV_XSCI, Conti_mV_XSCO와 같아야 합니다. 마지막 열 이름 (임의의 숫자 없음)은 확산 된 세 열 모두의 값을 가져야합니다 (예 : xsci는 xsci_140, xsci_12, xsci_76).
최종 데이터 프레임은 다음과 같습니다.
Conti_mV_XSCI| Conti_mV_XSCO
1 | 12
22 | 13
99 | 31
알다시피 XSCI의 첫 번째 값은 첫 번째 XSCI_140에서 가져오고 두 번째 값은 XSCI가있는 두 번째 열에서 가져옵니다. XSCO도 마찬가지입니다.
문제는 "Conti_mV,"IDD_PowerUp_mA " 등과 같이 특정 값으로 시작하는 모든 열에 대해이 작업을 수행해야한다는 것입니다.
내 문제 :
마지막에서 난수를 제거하자마자 열이 중복된다는 오류가 발생하고 우아하지 않기 때문에 헤더 이름을 정리하는 데 어려움을 겪고 있습니다.
누군가 나를 도울 수 있다면 큰 도움이 될 것입니다. 여기에 명확하지 않은 것이 있으면 의견을 말하십시오.
하나의 열 (3 개)이있는 새 데이터 프레임이 필요하고 데이터를 결합합니다.
감사.
먼저 필요한 경우 모든 열을 숫자로 변환하십시오.
df = df.apply(pd.to_numeric, errors='coerce')
오른쪽으로 분할되고 첫 번째 값을 선택한 열 이름별로 그룹화해야하는 경우 :
df = df.groupby(lambda x: x.rsplit('_', 1)[0], axis=1).sum()
print (df)
Conti_mV_XSCI Conti_mV_XSCO
0 1.0 12.0
1 22.0 13.0
2 9.0 31.0
열을 수동으로 필터링해야하는 경우 :
df['Conti_mV_XSCI'] = df.filter(like='XSCI').sum(axis=1)
df['Conti_mV_XSCO'] = df.filter(like='XSCO').sum(axis=1)
편집 : 열 이름의 시작 목록에 지정된 열만 합계에 대한 아이디어 :
cols = ['IOZH_Pat_uA', 'IOZL_Pat_uA', 'Power_Short_uA', 'IDDQ_uA']
for c in cols:
# here ^ is for start of string
columns = df.filter(regex=f'^{c}')
df[c] = columns.sum(axis=1)
df = df.drop(columns, axis=1)
print (df)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다