[英]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.