簡體   English   中英

根據其他列表中的值在 dataframe 中創建一列

[英]Making a column in a dataframe based of values in other lists

在此處輸入圖像描述我有兩個數據框。 “郵政編碼”列的每個值都包含一個 Zip 代碼,該代碼位於第 2,5 區或第 7 區。我想在代碼 dataframe 中創建一個名為“區”的全新列,該列對應於 ZADCDBD2ZD79A82D84175CADCDBD2ZD79A82D84175也。 這個 for 循環似乎不起作用。 我試圖將這些列中的每一個列成一個列表,然后使用 for 循環,但這似乎不起作用,因為區域代碼比實際的 Zip 代碼多。 它最終說 ValueError: 值的長度與索引的長度不匹配

這是代碼。

d2 = d_codes['District 2'].tolist()   
d5 = d_codes['District 5'].tolist() 
d7 = d_codes['District 7'].tolist() 
main_zips = codes['Zip Code'].tolist()

result = [] 
for value in main_zips: 
    if value in d2: 
       result.append("District 2") 
    elif value in d5: 
       result.append("District 5") 
    elif value in d7: 
       result.append("District 7") 
   

代碼[“結果”] = 結果

有沒有更好的方法來執行此任務?

一個小提示開始 - 最好給人們一個關於你的問題的完整工作示例。 提供一些虛假數據將使人們更容易幫助您。

我會嘗試讓您的地區進入不同的結構 - 單個 dataframe,地區,有兩列 - 郵政編碼和地區。 Pandas 熔體非常適合:

import pandas as pd
df = pd.read_csv("fake_data.csv")
print(df.head())
   District 2   District 5   District 7
0       23081        20106        20106
1       23090        20106        20106
2       23185        20106        20106
districts = df.melt()
print(districts)
      variable  value
0   District 2  23081
1   District 2  23090
2   District 2  23185
3   District 5  20106
4   District 5  20106
5   District 5  20106
6   District 7  20106
7   District 7  20106
8   District 7  20106

然后,您可以根據 zipcode 列合並您的數據框。

codes = codes.merge(districts, how="left", left_on="zipcode", right_on="zipcode")
   x  zipcode   district
0  1    23081  District2
1  2    23090  District2
2  3    20106  District5
3  3    20106  District5
4  3    20106  District5
5  3    20106  District7
6  3    20106  District7
7  3    20106  District7

但是有幾個問題,您的屏幕截圖顯示多個地區出現相同的郵政編碼,而且您有重復的郵政編碼。 合並將找到所有匹配項,因此您將在合並后得到額外的行。 您應該解決將相同郵政編碼放在多個地區的問題,然后您應該對郵政編碼列進行重復數據刪除,以確保每個郵政編碼只有一個匹配的地區。 完成后,進行合並。

如果您有任何問題,請隨時聯系我!

暫無
暫無

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

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