pandas 假设你有一个表格,其中包含两列:PatientName(姓名)和BillingDate(收费日期)。想合并同个患者收费日期两天范围内多个收费记录
时间: 2024-12-23 21:15:07 浏览: 11
在Pandas中,如果你想要合并那些来自同一个患者的、收费日期相近的记录,你可以使用`groupby`和`rolling`函数。假设你有一个DataFrame `df`,它的结构类似于这样:
```python
import pandas as pd
data = {
'PatientName': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob', 'Bob'],
'BillingDate': pd.date_range('2023-01-01', '2023-01-06'),
'Amount': [100, 200, 150, 300, 250, 350]
}
df = pd.DataFrame(data)
```
首先,你需要确定“两天范围”是多久,例如我们这里设定为连续的两个工作日。然后,你可以这样做:
```python
# 假设工作日是自然日,不是周末
window = pd.Timedelta(days=2)
# 使用rolling窗口对每个名字的记录进行聚合,条件是相邻日期
aggregated_df = df.groupby('PatientName')['BillingDate'].rolling(window=window, on='BillingDate').agg({
'BillingDate': lambda x: x.min(), # 取最小收费日期
'Amount': 'sum' # 汇总费用
}).reset_index()
print(aggregated_df)
```
这将创建一个新的DataFrame,其中每个`PatientName`只保留了连续两天内最近的一条记录,并计算了这段时间内的总金额。
阅读全文