【发布时间】:2021-12-18 19:42:12
【问题描述】:
我的巨大数据框中有一个示例数据框,如下所示。
import pandas as pd
import numpy as np
NaN = np.nan
data = {
'ID':['AAQRB','AAQRB','AAQRB',
'AHXSJ','AHXSJ','AHXSJ','GABOY','GABOY','GABOY','GHZGS','GHZGS','GHZGS'],
'Date':['10/18/2021 10:52:53 PM','10/18/2021 10:53:55 PM', '10/25/2021 5:55:43 PM',
'10/22/2021 10:37:06 PM','10/22/2021 10:38:22 PM','10/22/2021 10:39:56 PM',
'11/1/2021 1:27:15 AM','11/1/2021 1:28:45 AM','11/2/2021 8:53:39 PM',
'10/29/2021 11:13:57 PM', '10/29/2021 11:17:47 PM', '10/29/2021 11:19:15 PM'],
'Race_x':[NaN,NaN,NaN,NaN,NaN,1,NaN,NaN,1, NaN,NaN,1],
'Vaccine':['TRUE',NaN,NaN,'TRUE',NaN,NaN,'TRUE',NaN,NaN,'FALSE',NaN,NaN],
'Study_activity':
[NaN,'continue',NaN,NaN,'continue',NaN,NaN,'continue',NaN,NaN,'continue',NaN],
'Who_Contacted':
[NaN,NaN,'WeContacted',NaN,NaN,'WeContacted',NaN,NaN,NaN,NaN,NaN,'WeContacted']}
test_df = pd.DataFrame(data)
目标是获取每个 ID 的所有第一个值,并将参与者的几行过滤为包含所有信息的单行。最终的数据框应如下图所示。
代码尝试
我尝试使用 Grouper() 函数,代码如下。
test_df['Date'] = pd.to_datetime(test_df['Date'])
test_df1 = (test_df.groupby(['ID', pd.Grouper(key='Date', freq='D')])
.agg("first")
.reset_index())
baseline_df = test_df1[~test_df1.duplicated(subset = ['ID'], keep='first')]
但问题是,如果我使用 freq='D',那么第二天输入的 Race_x 值就会丢失。输出如下图所示。
如果我使用 freq='M' 或 freq='Y',则会捕获其他值,但 Dates 列的值会发生变化,我们会得到每个 ID 的月末日期,如下所示。
最后的“日期”列应该是每个 ID 的“日期”的第一个条目,并且不应更改。
非常感谢任何帮助。谢谢!
【问题讨论】:
标签: python pandas dataframe data-science data-analysis