繁体   English   中英

计算 Pandas dataframe 中分组行子集中的唯一值。 (标题我尽力了)

[英]Counting unique values in a subset of grouped rows in a Pandas dataframe. (I did my best with the title)

我试图找到某个发件人的最快时间。 在随附的图片Pandas DF中,您会看到我有一排 IP 地址以及时间和 SeqNo(我知道还有其他地址,但它们无关紧要)。 基本上我想做的是找到哪个 IP 在 SeqNo 相同的情况下最快(时间列中的数字最小)。 例如,对于 SeqNo 0,最快的 IP 将是 10.10.10.7,因为它具有最小的时间值,即 unix。 我需要对所有 SeqNos 组执行此操作,并找到 IP 最快的,因此每组 SeqNo' 的时间最短。

我在 pandas 中尝试了一些不同的 for、嵌套 for 和 while 循环以及一些不同的东西,但我没有运气。 如有需要请帮忙。

pandas 不是循环,而是让您groupby() SeqNo并获得每组的最短Time

index = df.groupby('SeqNo').Time.transform('min') == df.Time
df[index]

#        Source  SeqNo  Time
# 0  10.10.10.8      0     0
# 2  10.10.10.2      1     2
# 5  10.10.10.8      2     5

基于此样本数据:

df = pd.DataFrame({'Source':[f'10.10.10.{i}' for i in np.random.randint(1,9,10)],'SeqNo':[0]*2+[1]*3+[2]*5,'Time':range(10)})

#        Source  SeqNo  Time
# 0  10.10.10.8      0     0
# 1  10.10.10.6      0     1
# 2  10.10.10.2      1     2
# 3  10.10.10.4      1     3
# 4  10.10.10.2      1     4
# 5  10.10.10.8      2     5
# 6  10.10.10.7      2     6
# 7  10.10.10.7      2     7
# 8  10.10.10.3      2     8
# 9  10.10.10.8      2     9

您可以先按SeqNoTime列对 dataframe 进行排序。 SeqNo分组后,使用head(1)first()选择每个组中的第一项。

df = df.sort_values(['SeqNo', 'Time'], ascending=[True, True]).groupby('SeqNo').head(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM