python - 在熊猫 python 中,我如何在 DataFrame 中“黑名单”或“白名单”数字
问题描述
我有两个 DataFrame,我想在 df1 中使用第一个允许的数字向 df 添加一个新列,但只有每个组中的数量,当它再次从 1 开始时,它需要查看 Allowed_numbers 中的第一个数字.
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
...
我也在考虑某种相互映射的数字,因为 order_out 中的 1 在 y_goals 中总是 3。order_out 也可能有不同长度的数字行,并不总是最多 9。
解决方案
您可以order_out
用作 df1 的索引(我们减去 1 以从 1 索引转换为 0 索引):
y_goal = df1['Allowed_numbers'][df['order_out'] - 1]
现在我们可以重置 y_goal 上的索引并巧妙地合并两列:
df['y_goal'] = y_goal.reset_index(drop = True)
推荐阅读
- java - 如何在改造中获得 Array 的响应?
- c - 检查字符串是否包含相同数量的相同字符
- python - 将 Python 的控制台输出重定向到 Dash
- java - 传递数组列表
到另一个班级 - c++ - 鉴于概念,SFINAE 助手是否仍在规范中作为未弃用?
- apache - 如何重定向并同时允许目录.htaccess 中的任何文件?
- google-sheets - IsDate 数组公式
- python - 与 python 模型相比,tensorflow lite 模型给出了非常不同的准确度值
- c# - SQLXMLBULKLOAD 实用程序不适用于我的 XML 中的命名空间
- java - 数千个文件中的模式匹配