[英]Merge Dataframe alonside and rename column
c:/ somepath包含以下文件
file1 file2 file3
從“ c:/ somepath /”中,我正在捕獲名為“用戶”的列表中的所有文件名
users=[d for d in os.listdir("c:/somepath/") if os.path.isdir(os.path.join("c:/somepath/", d))]
注意:目錄中的文件數可以不同,但是文件中的數據保持相同的格式。
file1包含以下數據
index user name %used
1 a 25
2 a 40
3 a 20
4 a 25
file2包含以下數據
index user name %used
1 b 33
2 b 66
3 b 20
4 b 88
file3包含以下數據
index user name %used
1 c 25
2 c 69
3 c 20
4 c 73
我需要如下所示的結果
index a b c
1 25 33 25
2 40 66 69
3 20 20 20
4 25 88 73
如果看到結果,則將%used列重命名為相應的“用戶名”
有人可以告訴我實現此結果的最簡單方法。
IIUC:
pd.concat(pd.read_fwf(f, index_col=[0, 1]).squeeze() for f in users).unstack()
我將這些文件放入目錄
print(*(p.read_text() for p in Path('.').glob('file*')), sep='\n\n')
index user name %used
1 a 25
2 a 40
3 a 20
4 a 25
index user name %used
1 b 33
2 b 66
3 b 20
4 b 88
index user name %used
1 c 25
2 c 69
3 c 20
4 c 73
然后我運行了上面的代碼
from pathlib import Path
pd.concat(
pd.read_fwf(f, index_col=[0, 1]).squeeze() for f in Path('.').glob('file*')
).unstack()
user name a b c
index
1 25 33 25
2 40 66 69
3 20 20 20
4 25 88 73
我正在使用熊貓read_fwf
讀取固定寬度的文件。 我將前兩列設置為索引並壓縮結果。 這產生一個Series
。 然后,我使用pd.concat
將它們全部pd.concat
在一起。 之后,我使用unstack
將第二級索引(用戶)展開到列中。
你需要:
pd.concat([df1.set_index(['index', 'user_name']), df2.set_index(['index', 'user_name']), df3.set_index(['index', 'user_name'])], axis=1).unstack().dropna(1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.