假设我在Python中有一个pandas数据框,它显示了不同单位的业务部门负责人的名字。可能看起来像这样
Leader_Jan Leader_Feb Leader_Mar Leader_Apr
Unit1 Nina Nina Nina Nina
Unit2 Lena Lena NaN Lena
Unit3 Alex Maria Alex Alex
Unit4 Emilia NaN NaN NaN
Unit5 NaN Corinna Petra NaN
可以像这样重新创建:
import pandas as pd
import numpy as np
a = ['Nina','Nina','Nina','Nina']
b = ['Lena','Lena',np.NaN,'Lena']
c = ['Alex','Maria','Alex','Alex']
d = ['Emilia',np.NaN,np.NaN,np.NaN]
e = [np.NaN,'Corinna','Petra',np.NaN]
data = pd.DataFrame(data=[a,b,c,d,e], columns =['Leader_Jan','Leader_Feb','Leader_Mar','Leader_Apr'], index=['Unit1','Unit2','Unit3','Unit4','Unit5'])
背景:我想了解哪些单位的领导在哪些单位停留的时间很短或很长(以月为单位),以便以后了解我公司的特定单位是否存在团队冲突。
我想在数据框中添加每个单位的最小值和最大值(以月为单位),即领导者在一个不间断期间在那里的时间。由于可能的中断(见第2单元和第3单元),我不能只对每行中的不同名称使用值\计数。我更需要找出由NaN值和其他名称分隔的不同领导者名称序列的长度。要查看我认为的序列,请检查此照片中的不同颜色:
如你所见,第二单元和第三单元中的中断应该会导致多个停留时间。不应计算序列中的月份数。你知道吗
结果应该如下所示:
Leader_Jan Leader_Feb Leader_Mar Leader_Apr Min_length_of_stay_leaders \
Unit1 Nina Nina Nina Nina 4
Unit2 Lena Lena NaN Lena 1
Unit3 Alex Maria Alex Alex 1
Unit4 Emilia NaN NaN NaN 1
Unit5 NaN Corinna Petra NaN 1
Max_length_of_stay_leaders
Unit1 4
Unit2 2
Unit3 2
Unit4 1
Unit5 1
我知道这可能是相当复杂的后续,但我会喜欢任何类型的帮助/提示等,因为我有点迷失在这里。你知道吗
实际上,使用itertools.groupby非常容易:
对
float
的实例检查只是从计数中移除NaN
值的一种快速方法,您可以将其任意复杂化。你知道吗这将输出正确的结果(请注意,复制粘贴复制代码在Unit3中有3个“Alex”条目,与您的示例不同)
这会让你开始-
输出
解释
这将为您提供按名称分组的连续领导者计数-
只需提取
max
和min
-问题就出现在
Nina
身上——她一直在工作,所以在这种情况下min
也需要是4。你知道吗因此,对于边的情况,
mask
对象检测严格单调递增的序列,如果是这样的话,则替换为max
。你知道吗我仍然不确定它是否适用于所有情况,所以请检查
相关问题 更多 >
编程相关推荐