簡體   English   中英

如何將重復的行添加到 Pandas DF?

[英]how can I add duplicated rows to a Pandas DF?

我提前感謝您的幫助!

這個問題一開始可能看起來很奇怪,所以讓我來說明一下我想要完成的事情:

我有這個城市和縮寫的df:

在此處輸入圖像描述

我需要添加另一個名為“查詢”的列,這些查詢在列表中,如下所示:

queries = ['Document Management','Document Imaging','Imaging Services']

訣竅是我需要為列表中的每個查詢復制我的 df 行。 例如,對於第 0 行,我有PHOENIX, AZ 我現在需要 3 行說PHOENIX, AZ, 'query[n]'

看起來像這樣的東西:

當然,我是手動創建的,但我需要針對大量城市和大量查詢對其進行擴展。

這聽起來很簡單,但我已經嘗試了幾個小時,現在我不知道如何為它設計任何代碼。 再一次感謝你的幫助!

這是一種使用.explode()的方法:

import pandas as pd

df = pd.DataFrame({'City_Name': ['Phoenix', 'Tucson', 'Mesa', 'Los Angeles'],
                   'State': ['AZ', 'AZ', 'AZ', 'CA']})

# 'Query' is a column of tuples
df['Query'] = [('Doc Mgmt', 'Imaging', 'Services')] * len(df.index)

# ... and explode 'unpacks' the tuples, putting one item on each line
df = df.explode('Query')
print(df)

     City_Name State     Query
0      Phoenix    AZ  Doc Mgmt
0      Phoenix    AZ   Imaging
0      Phoenix    AZ  Services
1       Tucson    AZ  Doc Mgmt
1       Tucson    AZ   Imaging
1       Tucson    AZ  Services
2         Mesa    AZ  Doc Mgmt
2         Mesa    AZ   Imaging
2         Mesa    AZ  Services
3  Los Angeles    CA  Doc Mgmt
3  Los Angeles    CA   Imaging
3  Los Angeles    CA  Services

我自己是 python 的新手,但我會通過創建沒有“查詢”的 n(n = 唯一查詢值的數量)相同的數據幀來解決它。 然后對於每個數據框,使用“查詢”值之一創建一個新列。 最后,使用append將所有數據幀堆疊在一起。 一個簡短的例子:

adf1 = pd.DataFrame([['city1','sate1'],['city2','state2']])
adf2 = adf1

adf1['query'] = 'doc management'
adf2['query'] = 'doc imaging'

df = adf1.append(adf2)

如果有多種類型的查詢,另一種方法。 在原始數據框和查詢數據框中創建一個虛擬列,比如“key”,然后在“key”上合並兩者。

adf = pd.DataFrame([['city1','state1'],['city2','state2']])
q = pd.DataFrame([['doc management'],['doc imaging']])

adf['key'] = 'key'
q['key'] = 'key'

df = pd.merge(adf, q, on='key', how='outer')

更高級的用戶應該有更好的方法。 如果您趕時間,這是一個臨時解決方案。

您絕對應該使用jsmart 的答案 go ,但將此作為練習發布。

這也可以通過將原始城鎮 dataframe ( df ) 導出到列表或記錄來實現,為每個查詢手動復制每個,然后重建最終的 dataframe。

整個事情可以放在一行中,如果你能理解正在發生的事情,甚至是相對可讀的;)

pd.DataFrame([{**record, 'query': query}
               for query in queries
               for record in df.to_dict(orient='records')])

暫無
暫無

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

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