生成视图以标识python列中特定值的第一个条目和最后一个条目

时间:2018-07-05 06:00:28

标签: python python-3.x

此工作表的长度为150 000个条目,共有五列。在特定的列中,有许多重复的条目。列名是“ CNumber”。条目如下:

123
334
233
123
224

..依此类推。我想生成一个视图,以便对于特定的CNumber(例如123),我想标识第一个条目及其最后一个条目。

含义: 有一栏显示“时间”。因此,在特定的一天中,假设CNumber“ 123”使用了12次,因此在工作表中输入了12次。但是我只想确定它的第一次使用和最后一次使用,以便我可以计算出特定日期在公司场所的使用时间。

2 个答案:

答案 0 :(得分:2)

熊猫解决方案:

#create DataFrame from file
df = pd.read_csv(file)

print(df)
   CNumber  Time
0      123     1
1      334     2
2      123     3
3      123     4
4      224     5

boolean indexing过滤:

a = 123
df1 = df[df['CNumber'] == a]
print (df1)
   CNumber  Time
0      123     1
2      123     3
3      123     4

通过使用iloc索引位置来获取过滤后的列Time的第一个和最后一个值:

first = df1['Time'].iloc[0]
last = df1['Time'].iloc[-1]

print ('For value {} is first time: {} and last time: {}'.format(a, first, last))
For value 123 is first time: 1 and last time: 4

如果需要为所有第一个和最后一个值生成数据帧(如果像224列这样的唯一值相同)

df2 = df.groupby('CNumber')['Time'].agg(['first','last'])
print (df2)

         first  last
CNumber             
123          1     4
224          5     5
334          2     2

但是可能只过滤重复的值:

df3=df[df['CNumber'].duplicated(keep=False)].groupby('CNumber')['Time'].agg(['first','last'])
print (df3)
         first  last
CNumber             
123          1     4

答案 1 :(得分:0)

考虑时间,“第一”和“最后”具有双重含义。它可以表示“数据集中的最后一个”或“最后一个时间”。

以下代码使用group by一次处理所有CNumber,并显示了两种解释之间的区别。

import pandas as pd

df = pd.DataFrame(columns=["CNumber", "Time"]
                  , data=[
                      [123, 4],
                      [321, 3],
                      [123, 1],
                      [789, 5],
                      [123, 6],
                      [123, 2],
                      [321, 0]
                  ])
print(df, end='\n\n')

groups = df.groupby(['CNumber'])

print("Maximal time")
print(groups.max(), end='\n\n')


print("Last occurrence")
for group in groups:
    print('For CNumber {}, last occurence is {}'
    .format(group[0], group[1]['Time'].iloc[-1]))

这将产生以下输出:

       CNumber  Time
0      123     4
1      321     3
2      123     1
3      789     5
4      123     6
5      123     2
6      321     0

Maximal time
         Time
CNumber      
123         6
321         3
789         5

Last occurrence
For CNumber 123, last occurence is 2
For CNumber 321, last occurence is 0
For CNumber 789, last occurence is 5