簡體   English   中英

遍歷一個數據框中的單個列與另一個數據框中的列進行比較使用熊貓在第一個數據框中創建新列

[英]loop through a single column in one dataframe compare to a column in another dataframe create new column in first dataframe using pandas

現在我有兩個看起來像的數據框:

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)

您可以使用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

我稍微更改了第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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM