【问题标题】:loop through a single column in one dataframe compare to a column in another dataframe create new column in first dataframe using pandas循环遍历一个数据框中的单个列 与另一个数据框中的列进行比较 使用 pandas 在第一个数据框中创建新列
【发布时间】:2019-05-12 17:10:18
【问题描述】:

现在我有两个看起来像的数据框:

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”列。我希望输出看起来像:

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

【问题讨论】:

    标签: python pandas loops dataframe


    【解决方案1】:

    你可以使用pd.cut,当我看到ranges时,我首先想到的是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
    

    【讨论】:

      【解决方案2】:

      我稍微更改了第 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_goal
      0   50      a   3
      1   500     b   4
      2   1030    c   5
      4   3575    e   7
      

      【讨论】:

      • 我现在正在尝试这个解决方案并且得到值错误只能比较相同标签的系列对象。我在 cond 上看到了这个,我不知道它是在“a.Number”还是 c 列上。我尝试对所有这三个都使用reset_index(drop=True),但它不起作用。这就是我尝试过的a.number = a.number.reset_index(drop=True)c.low_number = c.low_number.reset_index(drop = True)c.high_number= c.high_number.reset_index(drop = True)
      猜你喜欢
      • 2022-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      • 2020-03-20
      • 1970-01-01
      • 2018-01-03
      相关资源
      最近更新 更多