首页 文章

循环遍历一个数据帧中的单个列与另一个数据帧中的列进行比较,使用pandas在第一个数据帧中创建新列

提问于
浏览
1

现在我有两个他们看起来像的数据帧:

c = pd.DataFrame({'my_goal':[3, 4, 5, 6, 7],
                 'low_number': [0,100,1000,2000,3000],
                 'high_number': [100,1000,2000,3000,4000]})

a= pd.DataFrame({'a':['a', 'b', 'c', 'd', 'e'],
                'Number':[50, 500, 1030, 2005 , 3575]})

我想要做的是,如果'Number'介于低数字和高数字之间,我希望它带回'my_goal'中的值 . 例如,如果我们看'a'那么'数字是100,所以我希望它带回来3.我还想创建一个数据框,其中包含数据框a中的所有列和数据框c中的“my_goal”列 . 我希望输出看起来像:

enter image description here

我尝试将我的高和低数字放入一个单独的列表并从中运行for循环,但所有这些都是'my_goal'数字:

low_number= 'low_number': [0,100,1000,2000,3000]
for i in a:
    if float(i) >= low_number:
        a = c['my_goal']

print(a)

2 回答

  • 2

    您可以使用 pd.cut ,当我看到范围时,我首先想到的是pd.cut:

    dfa = pd.DataFrame(a)
    dfc = pd.DataFrame(c)
    
    dfa['my_goal'] = pd.cut(dfa['Number'],
                            bins=[0]+dfc['high_number'].tolist(),
                            labels=dfc['my_goal'])
    

    输出:

    a  Number my_goal
    0  a      50       3
    1  b     500       4
    2  c    1030       5
    3  d    2005       6
    4  e    3575       7
    
  • 3

    我稍微更改了第4行,以包含不满足条件的测试用例 . 您可以使用条件为true的c行连接 .

    a= pd.DataFrame({'a':['a', 'b', 'c', 'd', 'e'],'Number':[50, 500, 1030, 1995 , 3575]})
    cond= a.Number.between( c.low_number, c.high_number)
    
    pd.concat([a, c.loc[cond, ['my_goal']] ], axis = 1, join = 'inner')
    
    
        Number  a   my_goal
    0   50      a   3
    1   500     b   4
    2   1030    c   5
    4   3575    e   7
    

相关问题