循环遍历一个数据帧中的一列,与另一个数据帧中的一列进行比较

现在我有两个数据框,它们看起来像:


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]})

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

http://img1.mukewang.com/6140559b0001a9b901930120.jpg

我尝试将我的高低数字放入一个单独的列表并从中运行 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)


江户川乱折腾
浏览 183回答 2
2回答

慕尼黑5688855

可以用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_goal0  a      50       31  b     500       42  c    1030       53  d    2005       64  e    3575       7

泛舟湖上清波郎朗

我稍微更改了第 4 行,以包含不满足条件的测试用例。您可以将 a 与条件为真的 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_goal0   50      a   31   500     b   42   1030    c   54   3575    e   7
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python