簡體   English   中英

根據條件將一個 dataframe 列的值分配給另一個 dataframe 列

[英]assign values of one dataframe column to another dataframe column based on condition

我試圖根據不同的列比較兩個數據幀,並基於它為 dataframe 分配一個值。

df1:

date    value1  value2
4/1/2021    A   1
4/2/2021    B   2
4/6/2021    C   3
4/4/2021    D   4
4/5/2021    E   5
4/6/2021    F   6
4/2/2021    G   7

df2:

Date    percent
4/1/2021    0.1
4/2/2021    0.2
4/6/2021    0.6

output:

date    value1  value2  per
4/1/2021    A   1       0.1
4/2/2021    B   2       0.2
4/6/2021    C   3       0.6
4/4/2021    D   4       0
4/5/2021    E   5       0
4/6/2021    F   6       0
4/2/2021    G   7       0.2

代碼1:

df1['per'] = np.where(df1['date']==df2['Date'], df2['per'], 0)

錯誤:

ValueError: Can only compare identically-labeled Series objects

注意:將 df2['Date] 的列值更改為 df2['date] 然后嘗試合並 code2:

new = pd.merge(df1, df2, on=['date'], how='inner')

錯誤:

ValueError: You are trying to merge on object and datetime64[ns] columns. If you wish to proceed you should use pd.concat
df1['per']=df1['date'].map(dict(zip(df2['Date'], df2['percent']))).fillna(0)



      date value1  value2  per
0  4/1/2021      A       1  0.1
1  4/2/2021      B       2  0.2
2  4/6/2021      C       3  0.6
3  4/4/2021      D       4  0.0
4  4/5/2021      E       5  0.0
5  4/6/2021      F       6  0.6
6  4/2/2021      G       7  0.2

您可以使用pd.merge並執行left連接以保留df1中的所有行並從df2中引入所有日期匹配的行:

pd.merge(df1,df2,left_on='date',right_on='Date', how='left').fillna(0).drop('Date',axis=1)

印刷:

         date value1  value2  percent
0  04/01/2021      A       1      0.1
1  04/02/2021      B       2      0.2
2  04/06/2021      C       3      0.6
3  04/04/2021      D       4      0.0
4  04/05/2021      E       5      0.0
5  04/06/2021      F       6      0.6
6  04/02/2021      G       7      0.2

*我認為你的倒數第二行有錯字。 percent應為 0.6 IIUC。

暫無
暫無

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

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