Python 在数据帧上迭代以提取数据
我有一个数据框,在列中包含小时间隔,在行中包含员工ID。 我希望迭代每个列(每小时一次),并仅当列包含数字1时将其提取到列表中(1表示该列在该小时内可用,0表示该列不可用) 我已经尝试了iterrows()和iteritems(),它们都没有提供我希望从这个数据帧中看到的内容 这是一个名为 可用=[0800090010001100] 然后我可以提取最小值和最大值来创建明细表Python 在数据帧上迭代以提取数据,python,Python,我有一个数据框,在列中包含小时间隔,在行中包含员工ID。 我希望迭代每个列(每小时一次),并仅当列包含数字1时将其提取到列表中(1表示该列在该小时内可用,0表示该列不可用) 我已经尝试了iterrows()和iteritems(),它们都没有提供我希望从这个数据帧中看到的内容 这是一个名为 可用=[0800090010001100] 然后我可以提取最小值和最大值来创建明细表 抱歉,如果这有点模糊,我对Python3和Pandas还很陌生,您不需要迭代 假设您有这样一个数据帧 0 1
抱歉,如果这有点模糊,我对Python3和Pandas还很陌生,您不需要迭代 假设您有这样一个数据帧
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 1 0 1 1 0
1 1 0 1 1 1 1 1 1 0 1
2 1 1 1 0 0 0 0 0 0 0
3 0 1 1 0 1 1 0 0 1 1
4 1 0 1 0 1 0 1 0 0 0
5 0 1 1 0 0 0 0 0 0 0
6 1 0 0 0 1 1 1 1 0 0
7 0 1 0 1 0 1 1 1 1 1
8 0 0 1 0 1 1 1 0 0 0
9 1 0 0 1 0 0 1 1 1 1
您可以使用此代码获取值为1的所有列的列名
df['available'] = df.apply(lambda row: row[row == 1].index.tolist(), axis=1)
0 1 2 3 4 5 6 7 8 9 available
0 0 0 0 0 0 1 0 1 1 0 [5, 7, 8]
1 1 0 1 1 1 1 1 1 0 1 [0, 2, 3, 4, 5, 6, 7, 9]
2 1 1 1 0 0 0 0 0 0 0 [0, 1, 2]
3 0 1 1 0 1 1 0 0 1 1 [1, 2, 4, 5, 8, 9]
4 1 0 1 0 1 0 1 0 0 0 [0, 2, 4, 6]
5 0 1 1 0 0 0 0 0 0 0 [1, 2]
6 1 0 0 0 1 1 1 1 0 0 [0, 4, 5, 6, 7]
7 0 1 0 1 0 1 1 1 1 1 [1, 3, 5, 6, 7, 8, 9]
8 0 0 1 0 1 1 1 0 0 0 [2, 4, 5, 6]
9 1 0 0 1 0 0 1 1 1 1 [0, 3, 6, 7, 8, 9]
如果您想从中获得mix/max,可以使用
df['min_max'] = df['available'].apply(lambda x: (min(x), max(x)))
available min_max
0 [5, 7, 8] (5, 8)
1 [0, 2, 3, 4, 5, 6, 7, 9] (0, 9)
2 [0, 1, 2] (0, 2)
3 [1, 2, 4, 5, 8, 9] (1, 9)
4 [0, 2, 4, 6] (0, 6)
5 [1, 2] (1, 2)
6 [0, 4, 5, 6, 7] (0, 7)
7 [1, 3, 5, 6, 7, 8, 9] (1, 9)
8 [2, 4, 5, 6] (2, 6)
9 [0, 3, 6, 7, 8, 9] (0, 9)
你可以简单地做
available=df.columns[df.T.any(axis=1)].tolist()
通常,不建议对熊猫数据帧进行迭代,除非它们很小,因为这样做不使用矢量化函数,因此速度较慢
你能展示你剩下的代码吗
假设数据帧中只有0和1,下面的条件选择应该可以工作(如果我正确地解释了您想要什么,那么您更可能想要什么
):
或在1行中:
lists = df[df != 0].values.tolist()
最终,我要做的就是这样。搜索在0800小时内可用的代理ID的列表,并将其添加到列表中。然后每小时做同样的事情。然后,通过这些列表,我想检查代理ID是否已经达到了本周的最大可用小时数,然后从该池中安排X个代理,从0800-0900小时开始。确保从该列表中安排足够的时间,以满足该小时预期量所需的代理数量。我可能找错了方向,也许有更好的方法,但我会边走边学!埃斯
lists = df[df != 0].values.tolist()