[英]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.