我有 2 個資料框
db1 = pd.DataFrame(
columns=["value", "type",'type2'], data=[[1, "A","ca"],[2, "B","cb"],[3, "C","cc"],[4, "D",'dd'],[5, "E",'ee'],["Nan","F",'ff']]
)
print(db1)
db2 = pd.DataFrame(
columns=["value", "type"], data=[["Nan", "A"],["Nan", "F"]]
)
db1
value type type2
0 1 A ca
1 2 B cb
2 3 C cc
3 4 D dd
4 5 E ee
5 Nan F ff
db2
value type
0 Nan A
1 Nan F
我想在 db2 的新列中添加“type2”的值 if (db1['type'] == db2['type']) & (db1['value'] == db2['value'])
像那樣:
db2
value type new
Nan A
Nan F ff
我嘗試了一些東西,但它不起作用
db2["new"] =np.nan
db2["new"]= np.where((db1['type'] == db2['type']) & (db1['value'] == db2['value']), db2['type2'], '')
謝謝!
uj5u.com熱心網友回復:
試試這個(有點難看但有效:)
import pandas as pd
db1 = pd.DataFrame(
columns=["value", "type",'type2'], data=[[1, "A","ca"],[2, "B","cb"],[3, "C","cc"],[4, "D",'dd'],[5, "E",'ee'],["Nan","F",'ff']]
)
print(db1)
db2 = pd.DataFrame(
columns=["value", "type"], data=[["Nan", "A"],["Nan", "F"]]
)
for index,row in db2.iterrows():
type_=db2.loc[index,'type']
value_=db2.loc[index,'value']
df_tempo=db1.loc[(db1['type']==type_)&(db1['value']==value_),:]
if df_tempo.shape[0]==1 :
db2.loc[index,'new']=df_tempo['type2'].values[0]
else :
db2.loc[index,'new']='no_val'
輸出 :
db2
value type new
0 nan A no_val
1 nan F ff
2 3 F no_val
如果您只是為了保持兩者之間的匹配:
db2=db2.loc[db2['new']!='no_val',:]
db2
value type new
1 Nan F ff
uj5u.com熱心網友回復:
IIUC,您可以進行合并,這應該會給您帶來預期的結果
pd.merge(db1, db2, on = ['value', 'type'])
如果您想像示例中一樣保留來自 db2 的資料,您可以添加 how = 'right' 以確保無論所有 db2 行都存在
pd.merge(db1, db2, on = ['value', 'type'], how = 'right')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484944.html
下一篇:如果起息日不是最大日期,則洗掉行
