簡體   English   中英

合並數據框alonside並重命名列

[英]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()

MCVE

我將這些文件放入目錄

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM