python - 如何在熊猫中选择每个唯一记录的第一行和最后一行
问题描述
如何选择所有唯一记录的第一行和最后一行。
我尝试了下面的代码,但我知道它不正确。首先它只需要一列,而其他列在这一列中被遗漏了。
for key, value in df['x'].iteritems():
# print(key, value)
if temp != value:
print(temp)
temp = value
解决方案
更新:在更好地理解了 OP 的问题之后,我想我已经想出了正确的解决方案
初始表
+----------------+
|x |y |z |
+----------------+
|111000004 |1 |1 |
|111000014 |5 |1 |
|111000014 |5 |2 |
|111001605 |2 |1 |
|111001605 |2 |2 |
|111003425 |1 |1 |
|111003425 |1 |2 |
|111003425 |1 |3 |
|111003748 |4 |1 |
|111003748 |4 |2 |
|111003748 |3 |4 |
|111003748 |2 |3 |
|111003748 |1 |1 |
+----------------+
OP 提到它是一个时间序列数据,所以我按时间列(“x”)对数据进行分组并得到第一行和最后一行。我附加了这两个表并按索引(“x”)对它们进行了排序,并删除了重复项以清理输出。
g = df.groupby(['x'])
d = g.first().append(g.last()).sort_index().reset_index().drop_duplicates()
最终结果d
如下。
+----------------+
|x |y |z |
+----------------+
|111000004 |1 |1 |
|111000014 |5 |1 |
|111000014 |5 |2 |
|111001605 |2 |1 |
|111001605 |2 |2 |
|111003425 |1 |1 |
|111003425 |1 |3 |
|111003748 |4 |1 |
|111003748 |1 |1 |
+----------------+
要获取 DataFrame 中的所有唯一行,您可以这样做
unique_df = df.drop_duplicates()
然后要获得第一行和最后一行,您可以调用head()
并tail()
在unique_df
first = unique_df.head(1)
last = unique_df.tail(1)
推荐阅读
- ios - 将objective-c完成处理程序传递给swift
- python - Python程序读取excel表格不起作用?
- excel - 自动计算从开始日期起 90 天
- typescript - Typescript如何在不修改函数的情况下更改函数结果
- javascript - 在 Apollo Server 中的解析器和突变之间共享逻辑
- java - 什么是 Java 中正式调用的“search: { ... }”/“break search”语法?
- angular2-template - 如何使组件A在Angular 2中的组件B处显示数据
- python - 可执行文件仅部分有效
- amazon-web-services - AWS .NET SDK 适用于 DynamoDB,不适用于 S3
- javascript - 试图为没有 jquery 的按钮制作 for 循环