df筛选 成交日期列相同的,仅保留成交时间列最新的
时间: 2024-10-22 16:21:17 浏览: 17
要筛选成交日期列(假设名为'date')相同但成交时间列(如'time')最新的行,你可以按照以下步骤操作:
1. 首先,对数据框(df)按'date'列进行分组,这样可以保证每个日期下的所有行都在同一组内。
```python
grouped_df = df.sort_values(['date', 'time'], ascending=[True, False]).groupby('date')
```
2. 对于每个日期组,取最后一次交易(即time列最新),这可以通过`first()`函数实现,因为默认情况下`first()`会选择每个组的第一个非重复观测值。
```python
new_df = grouped_df.first()
```
3. 如果你想保留原数据集中其他未发生变化的列,可以在`first()`之后选择这些列并合并结果。
```python
selected_columns = [col for col in df.columns if col != 'time']
result_df = new_df[selected_columns]
```
4. 最后,如果你需要将这个筛选后的结果存储回数据库,可以使用`to_sql`函数,就像之前那样,但是这里的数据框是`result_df`而不是`db_data`。
```python
result_df.to_sql(name='ptrade_filtered', con=engine, if_exists='append', index=False)
```
相关问题
df对筛选持仓数量列为0且成交时间列相同的行分组,仅保留组中成交日期最早的行
在数据处理中,使用pandas库的DataFrame对象可以方便地进行数据筛选和分组操作。对于您的需求,即筛选持仓数量列为0且成交时间列相同的行,并仅保留组中成交日期最早的行,可以使用以下步骤:
1. 首先,确保您的DataFrame已经正确加载了相关数据,并且包含了“持仓数量”和“成交时间”这两个列。
2. 使用`groupby`方法对“成交时间”列进行分组。
3. 在每个分组内,使用`idxmin()`方法找到“持仓数量”为0的行中成交日期最早的行的索引。
4. 使用这些索引来选择最终需要保留的行。
以下是具体的代码示例:
```python
import pandas as pd
# 假设df是您的DataFrame,包含'持仓数量'和'成交时间'两列
# 首先筛选出持仓数量为0的行
filtered_df = df[df['持仓数量'] == 0]
# 然后按'成交时间'进行分组,并找到每组中'成交日期'最小的行的索引
earliest_indices = filtered_df.groupby('成交时间').apply(lambda x: x['成交日期'].idxmin())
# 使用这些索引从原始DataFrame中选取对应的行
result_df = df.loc[earliest_indices]
print(result_df)
```
这段代码将输出一个DataFrame,其中只包含每个相同成交时间组中成交日期最早的、持仓数量为0的行。请根据实际情况调整列名和逻辑以适应您的具体数据集。
阅读全文