Python 在熊猫蟒蛇中,“我该怎么做?”;“黑名单”;或;“白名单”;数据帧中的数字

Python 在熊猫蟒蛇中,“我该怎么做?”;“黑名单”;或;“白名单”;数据帧中的数字,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,我想用df1中允许的第一个数字向df添加一个新列,但每个组中的数字数量相同,当它再次从1开始时,它需要查看允许的数字中的第一个数字 df1 = pd.DataFrame({'Allowed_numbers': [3,4,5,6,8,9,12,15,17,24,28,29,30]}) df = pd.DataFrame({'order_out': [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]}) 我想要这个:

我有两个数据帧,我想用df1中允许的第一个数字向df添加一个新列,但每个组中的数字数量相同,当它再次从1开始时,它需要查看允许的数字中的第一个数字

df1 = pd.DataFrame({'Allowed_numbers': [3,4,5,6,8,9,12,15,17,24,28,29,30]})
df = pd.DataFrame({'order_out': [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9]})
我想要这个:

      order_y  y_goal
0         1       3
1         2       4
2         3       5
3         4       6
4         5       8
5         6       9
6         7      12
7         8      15
8         9      17
9         1       3
10        2       4
11        3       5
12        4       6
13        5       8
14        6       9
15        7      12
16        8      15
17        9      17
...
我试过一些东西

df= bags.sort_values(['order_out'])
df.loc[:, 'y_goal'] = pd.Series(Allowed_numbers)
还有这个

    order_out y_goal
0         1     3.0
1         2     4.0
2         3     5.0
3         4     6.0
4         5     8.0
5         6     9.0
6         7    12.0
7         8    15.0
8         9    17.0
9         1    24.0
10        2    28.0
11        3    29.0
12        4    30.0
13        5     NaN
14        6     NaN
15        7     NaN
16        8     NaN
17        9     NaN
...


我也在考虑一些相互对应的映射数字,因为1的顺序永远是3的。order\u out也可能有不同长度的数字行,不一定总是9。

您可以使用
order\u out
作为df1的索引(我们减去1以将1索引转换为0索引):

现在我们可以重置y_目标上的索引,并整齐地合并两列:

df['y_goal'] = y_goal.reset_index(drop = True)

您也可以在此处使用列表:

df['y_goal'] = [df1['Allowed_numbers'][x - 1] for x in df['order_out']]
考虑哪一个可以将列与其他数据帧的索引相匹配。但是,由于排序不是从零开始的,因此在合并后使用要删除的临时列

df_结果=(df.assign(key=lambda x:x[“order_out”].sub(1))
.merge(df1,left_on=“key”,right_index=True,how=“left”)
.drop(“键”,axis=“列”)
)
输出

df\u结果
订购允许的号码
0           1                3
1           2                4
2           3                5
3           4                6
4           5                8
5           6                9
6           7               12
7           8               15
8           9               17
9           1                3
10          2                4
11          3                5
12          4                6
13          5                8
14          6                9
15          7               12
16          8               15
17          9               17
18          1                3
19          2                4
20          3                5
21          4                6
22          5                8
23          6                9
24          7               12
25          8               15
26          9               17

Thank you(谢谢)是一种魅力。这同样有效,Thank you(谢谢)非常有效,即使“订单”中没有。谢谢,这就是我现在需要的。
df['y_goal'] = [df1['Allowed_numbers'][x - 1] for x in df['order_out']]