簡體   English   中英

如何使用pandas.DataFrame.assign()根據不同的數據框添加新列

[英]How to use pandas.DataFrame.assign() to add new column based on a different dataframe

我有兩個數據框。

df1:

filename|data
fileA|1
fileB|33
fileC|343

df2:

path|filesize|filetype
/tmp/fileA.csv|123|csv
/tmp/fileB.csv|123|csv
/tmp/fileC.csv|3534|csv
/tmp/fileD.csv|234|csv

我希望結果是

filename|data|path
fileA|1|/tmp/fileA.csv
fileB|33|/tmp/fileB.csv
fileC|343|/tmp/fileC.csv
fileD|3243|/tmp/fileD.csv

這似乎非常簡單,但我似乎無法使其與.assign()一起使用。 我需要將df1.filename中的每一行與df2.filepath中的內容進行匹配,然后將df1 ['filepath']添加到df1。

我嘗試了以下操作,但它抱怨Series不“可哈希化”

df1.assign(path = lambda x: df2[df2.path.str.contains(x.filename + ".csv")][path])

{TypeError}“系列”對象是可變的,因此不能進行散列

我通過執行以下操作來確保df1.assign()是正確的

df1.assign(path = lambda x: x.filename)

並且它起作用了,只是在df1上附加了文件名(這是我所期望的)。

我假設問題區域是包含“系列”的`contains( x.filename +“ .csv”)。 如果我將其更改為x.filename.values,則得到

{TypeError}無法散列的類型:“ numpy.ndarray”。 我不明白“ x”是什么。 我假設它是一個Series對象,但不知道如何確定它與哪個“行”相關聯。

我可以蠻力地執行此操作,只是循環遍歷df1,但是df1是2M +記錄,出於性能原因,大熊貓似乎普遍不贊成循環。 有人可以指出我做錯了什么嗎?

IIUC,我想您想使用str訪問器並使用正則表達式extract從路徑中提取文件名並合並到文件名中:

df2.assign(filename=df2.path.str.extract(r'(\w+)\.csv', expand=True))\
   .merge(df1, on='filename')

輸出:

             path  filesize filetype filename  data
0  /tmp/fileA.csv       123      csv    fileA     1
1  /tmp/fileB.csv       123      csv    fileB    33
2  /tmp/fileC.csv      3534      csv    fileC   343

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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