Python 在熊猫蟒蛇中,“我该怎么做?”;“黑名单”;或;“白名单”;数据帧中的数字
我有两个数据帧,我想用df1中允许的第一个数字向df添加一个新列,但每个组中的数字数量相同,当它再次从1开始时,它需要查看允许的数字中的第一个数字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 = 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']]