【发布时间】:2021-09-24 21:17:04
【问题描述】:
前几天我问了一个类似的问题,但无法使用我在当前问题中收到的建议。
如何使用与“port_df”相同的代码位置填充 df 中的“数量”列?
dataA = {'ID': ['1407','1726','2910','1890'],
'quanitity': ['nan','nan','nan','nan'],
'NetRate': ['nan','nan','nan','nan'],
'GrossRate': [150,0,238,0],
'PositionClass': ['L','L','S','S'],
}
df = pd.DataFrame(dataA, columns = ['ID', 'quanitity', 'NetRate', 'GrossRate','PositionClass' ])
df
ID quanitity NetRate GrossRate PositionClass
0 1407 nan nan 150 L
1 1726 nan nan 0 L
2 2910 nan nan 238 S
3 1890 nan nan 0 S
port = {'Symbol': ['1407','1726','3214','2910','1890','5614','4578'],
'Position': ['56461','441','31316','546','105','0','nan'],
'NetRate': ['nan','nan','nan','nan','nan','nan','nan'],
'PositionClass': ['L','L','S','S','L','S','S'],
}
port_df = pd.DataFrame(port, columns = ['Symbol', 'Position', 'NetRate', 'PositionClass' ])
port_df
Symbol Position NetRate PositionClass
0 1407 56461 nan L
1 1726 441 nan L
2 3214 31316 nan S
3 2910 546 nan S
4 1890 105 nan L
5 5614 0 nan S
6 4578 nan nan S
我尝试了这两个代码。但无法得到我想要的结果
import numpy as np
import pandas as pd
df['quanitity'] = (np.where(df['ID'] == port_df['Symbol'],
df['ID'].map(port_df.set_index('Symbol')['Position']),
np.nan))
或
df.loc[df['ID'].isin(port_df.Symbol),['quanitity']] = port_df['Position']
感谢任何帮助。
【问题讨论】:
-
这能回答你的问题吗? Pandas Merging 101
-
供映射使用
df['quantity']=df['ID'].map(port_df.set_index('Symbol')['Position']) -
@K saman 它在我这边工作正常然后使用
df.merge(port_df[['Symbol','Position']],left_on='ID',right_on='Symbol',how='left') -
是的,它成功了。谢谢@AnuragDabas
标签: python pandas dataframe conditional-statements missing-data