我有一张考勤表。每行有一个名称,后面有53列,表示一年中的周数。当一个人出席时,该周的分数为1,否则为空。我总结了每个人的总出勤率,并制作了参观次数的柱状图。很多人一年参加不到6次。我想看看访问之间的时间跨度;每个至少访问2次的人在第一次访问和最后一次访问之间的间隔时间。下面是df.tail()
的图像。索引1433提供了一个示例,该人员访问了两次,第一周一次,第46周一次,即45周。我试过for i,j in df.iterrows():
,但没能让它工作,我不确定这是个好主意
非常感谢您的任何想法
Tags:
使用first_valid_index&last_valid_index
Pandas具有第一个有效索引和最后一个有效索引,以获取非空位置的索引。您可以通过使用iloc将数据帧切片到52周来找到位置。在下面的示例中,我只将其切片15周(0到14)。要将索引获取为整数,请创建一个包含列名和位置的字典。用它减去差值,得到间隙
下面是执行此操作的代码
如果只想检查访问次数为2或更多的行,只需将其添加到条件中即可
我以前共享的数据(数据见下文)的输出为:
使用Apply和list
这里有一个解决方法。您可以在dataframe上使用apply函数,并对给定行的每一列进行迭代,以确定它是否为notnull。如果是,则捕获列#。这将为您提供所有不为null的列。一旦有了它,就更容易找到两个列索引之间的最大差异。这将为您提供两次访问之间的最大间隔
执行此操作的代码如下所示:
以下是输出:
最后一列现在有一些值,您可以通过这些值进行迭代,并了解他们参加会议的频率
如果您想要访问次数,只需执行以下操作:
由于最后一列是
'Total_Visits'
,因此apply语句必须使用df.columns[:-1]
如果你想得到两次访问之间的最大间隔,那么你可以给出这个
其结果将是:
为了找到最大的差距,你还需要考虑“TooTraveAccess”栏。这样,你就可以知道是否有人在第10周后就再也没有来过。最大间隔为52周-10周。为此,我们需要包括“总访问量”。这就是为什么我们将遍历df.columns
而不是df.columns[:-1]
我认为这很简单,也很容易理解
设置:
转换df以便于系列操作:
创建一系列所有出席人数:
最后,从最后一次出席人数中减去第一次出席人数,得到跨度:
结果:
相关问题 更多 >
编程相关推荐