例如,假設我有資料框:
NAME = ['BOB', 'BOB', 'BOB', 'SUE', 'SUE', 'MARY', 'JOHN', 'JOHN', 'MARK', 'MARK', 'MARK', 'MARK']
STATE = ['CA','CA','CA','DC','DC','PA','GA','GA','NY','NY','NY','NY']
MAJOR = ['MARKETING','BUSINESS ADM',np.nan,'ECONOMICS','MATH','PSYCHOLOGY','HISTORY','BUSINESS ADM','MATH', 'MEDICAL SCIENCES',np.nan,np.nan]
SCHOOL = ['UCLA','UCSB','CAL STATE','HARVARD','WISCONSIN','YALE','CHICAGO','MIT','UCSD','UCLA','CAL STATE','COMMUNITY']
data = {'NAME':NAME, 'STATE':STATE,'MAJOR':MAJOR, 'SCHOOL':SCHOOL}
df = pd.DataFrame(data)
我要連接具有相同名稱的多個唯一值的行。
我試過了:
gr_columns = [x for x in df1.columns if x not in ['MAJOR','SCHOOL']]
df1 = df1.groupby(gr_columns).agg(lambda col: '|'.join(col))
和預期
我正在嘗試連接 NAME 欄位相同的列中的行。方便的是,STATE 欄位對于每個 NAME 都是靜態的。我希望輸出看起來像:
| 姓名 | 狀態 | 重大的 | 學校 |
|---|---|---|---|
| 鮑勃 | 加州 | 市場營銷、業務管理 | 加州大學洛杉磯分校、加州大學舊金山分校、加州州立大學 |
| 起訴 | 直流 | 經濟學、數學 | 哈佛,威斯康星 |
| 瑪麗 | 功放 | 心理學 | 耶魯 |
| 約翰 | 遺傳演算法 | 歷史,商業ADM | 芝加哥,麻省理工學院 |
| 標記 | 紐約 | 數學、醫學 | 加州大學圣地亞哥分校、加州大學洛杉磯分校、加州州立大學、社區 |
但相反,我得到一個包含連接學校的列。
uj5u.com熱心網友回復:
這是因為你np.nan不能轉換為str,所以它被pandas自動洗掉了。您需要先將其型別轉換為 str :
df.groupby(['NAME', 'STATE']).agg(lambda x: ','.join(x.astype(str)))
要洗掉 na 并將 NAME 和 STATE 保留為列:
df.groupby(['NAME', 'STATE']).agg(lambda x: ','.join(x.dropna())).reset_index()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527138.html
