[英]Replace values of a Pandas dataframe's Column based on values of another column
[英]Replace values in pandas dataframe based on column names
我想根據列名替換另一個系列的pandas數據框中的值。 我有傻瓜。 數據幀:
Y2000 Y2001 Y2002 Y2003 Y2004 Item Item Code
34 43 0 0 25 Test Val
我還有另一個系列:
Y2000 41403766
Y2001 45283735
Y2002 47850796
Y2003 38639101
Y2004 45226813
如何根據第二個系列中的值替換第一個數據框中的值?
-更多編輯:要重新創建問題,代碼和數據在這里: umd.box.com/s/hqd6oopj6vvp4qvpwnj8r4lm3z7as4i3
運行代碼的說明:
要運行此代碼:
將config_rotations.txt中的data_dir替換為輸入目錄的路徑,即保存文件的位置
用所需的任何輸出路徑替換config_rotations.txt中的out_dir
運行python code \\ crop_stats.py。 問題出在crop_stats.py的第133行
- 編輯:
基於@Andy的查詢,這是我想要的結果:
Y2000 Y2001 Y2002 Y2003 Y2004 Item Item Code
41403766 45283735 47850796 38639101 45226813 Test Val
我試過了
df_a.replace(df_b)
但這不會更改df_a中的任何值
您可以在重塑和覆蓋列之后從該系列構造一個df:
In [85]:
df1[s.index] = pd.DataFrame(columns = s.index, data = s.values.reshape(1,5))
df1
Out[85]:
Y2000 Y2001 Y2002 Y2003 Y2004 Item Item Code
0 41403766 45283735 47850796 38639101 45226813 Test Val
因此,這使用序列索引值從df中進行子選擇,然后從同一序列構造df,這里我們必須對數組進行整形以形成單行df
編輯
我上面的代碼無法在您的真實代碼上運行的原因首先是在分配您無法執行此操作時:
df.loc[(df['Country Code'] == replace_cnt) & (df['Item'] == crop)][s.index]
這稱為鏈式索引並發出警告,請參閱docs 。
因此,要糾正此問題,您可以將列放在[]
:
df.loc[(df['Country Code'] == replace_cnt) & (df['Item'] == crop),s.index]
另外,pandas嘗試沿索引值和列名對齊,如果它們不匹配,那么您將獲得NaN
值,因此您可以通過調用.values
獲得一個np數組來解決這個問題,該數組只是成為沒有索引或列標簽,只要數據形狀是可廣播的,它就會做您想要的:
df.loc[(df['Country Code'] == replace_cnt) & (df['Item'] == crop),s.index] = pd.DataFrame(columns=s.index, data=s.values.reshape(1, len(s.index))).values
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.