簡體   English   中英

如何在不同的DataFrames中映射系列

[英]How to map series in different DataFrames

我有兩個數據框,一個保存數據集的大部分數據,第二個保存我在稍后的時間點獲得的一些其他數據。

考慮下面的例子,我想更換存儲在值df_main.b與找到的值df_additional.b ,我應該知道哪些值通過下列中找到映射使用order_id ,存在於兩個dataframes。

In [385]: df_main = pd.DataFrame({'order_id':['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7'], 'b':[1,2,3,4,5,6,7], 'c':np.random.randn(7), 'd':np.random.randn(7)})

In [386]: df_additional = pd.DataFrame({'order_id':['A1', 'A2', 'A3', 'A5', 'A6', 'A7', 'A8'], 'b':['a','b','c','d','e','f','g']})

In [387]: df_main
Out[387]: 
   b         c         d order_id
0  1  0.460474 -1.092239       A1
1  2  0.872538  1.819610       A2
2  3 -0.343626 -2.493006       A3
3  4  0.489427  0.074341       A4
4  5 -1.690572  0.162746       A5
5  6 -0.851540  0.543129       A6
6  7 -0.559258 -0.170457       A7

In [388]: df_additional
Out[388]: 
   b order_id
0  a       A1
1  b       A2
2  c       A3
3  d       A5
4  e       A6
5  f       A7
6  g       A8

請注意, df_main.order_id中的值與df_additional.order_id

我想df_main.b轉向np.nan這些訂單存在於df_main而不是在df_additional (例如'A4' ,從而df_main['b'][3]應該轉向np.nan

我還希望所有在df_additional中存在df_additional不在df_main存在的df_main被忽略,在df_main中沒有新添加的df_main

最終輸出應為:

>>> final_version
   b            c         d order_id
0  a     0.460474 -1.092239       A1
1  b     0.872538  1.819610       A2
2  c    -0.343626 -2.493006       A3
3  NaN   0.489427  0.074341       A4
4  d    -1.690572  0.162746       A5
5  e    -0.851540  0.543129       A6
6  f    -0.559258 -0.170457       A7

感謝您的幫助

編輯我已經用np.where()嘗試了以下結果:

In [389]: df_main.b = np.where(df_main.order_id == df_additional.order_id, df_additional.b, np.nan)

In [390]: df_main
Out[390]: 
     b         c         d order_id
0    a  0.460474 -1.092239       A1
1    b  0.872538  1.819610       A2
2    c -0.343626 -2.493006       A3
3  NaN  0.489427  0.074341       A4
4  NaN -1.690572  0.162746       A5
5  NaN -0.851540  0.543129       A6
6  NaN -0.559258 -0.170457       A7

事情進展到一定點,但似乎比較是逐元素進行的,因此在某個點( 'A4' != 'A5' )失敗,從那時開始,所有比較也都失敗了。 是否有可能使用某種形式的isin所有order_iddf_main ,得到指數和該指數檢索b值(?)

您正在尋找merge

pd.merge(df_additional, df_main, how='right', on='order_id')

#Out[13]:
#   b_x order_id  b_y         c         d
#0    a       A1    1 -2.532221  0.702512
#1    b       A2    2  2.550224 -0.649286
#2    c       A3    3  0.737817  0.999865
#3    d       A5    5 -0.484483  1.153589
#4    e       A6    6  0.526035  0.335695
#5    f       A7    7 -0.901915 -1.312429
#6  NaN       A4    4 -0.905911  0.865345

如果您從df_additional中的order_id列創建索引,則可以使用join()

df_additional.set_index('order_id', inplace=True)    
df_main.join(df_additional, on='order_id', how='left')

或者,如果您可以從兩側的order_id列中進行索引,則可以進行簡單的序列分配。

df_main.set_index('order_id', inplace=True)
df_additional.set_index('order_id', inplace=True)    
df_main['b_add'] = df_additional['b']

如果您需要第二種情況的示例,這里是熊貓的10分鍾

暫無
暫無

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

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