繁体   English   中英

如何根据 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM