![](/img/trans.png)
[英]How to populate a column in a dataframe based on data in another column and condition /switch on another column in python
[英]How to populate a column base on another dataframe column in Python?
前几天我问了一个类似的问题,但无法使用我在当前问题中收到的建议。
如何使用与“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']
感谢任何帮助。
在代码后添加这些行:
my_dict = dict(zip(port['Symbol'], port['Position']))
df['quanitity'] = [my_dict[id] for id in df['ID']]
解决方案:
import pandas as pd
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' ])
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' ])
# Add these two lines
my_dict = dict(zip(port['Symbol'], port['Position']))
df['quanitity'] = [my_dict[id] for id in df['ID']]
print(df)
输出
ID quanitity NetRate GrossRate PositionClass
0 1407 56461 nan 150 L
1 1726 441 nan 0 L
2 2910 546 nan 238 S
3 1890 105 nan 0 S
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.