Python 在PANDAS中迭代唯一的值

Python 在PANDAS中迭代唯一的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下格式的数据集: Patient Date colA colB 1 1/3/2015 . 5 1 2/5/2015 3 10 1 3/5/2016 8 . 2 4/5/2014 2 . 2 etc 我试图在PANDAS中定义一个函数,它将唯一的患者作为一个项来处理,并迭代这些唯一的患者项,以便只保留每列的最新观察结果(用缺失或null替换所有其他值)。例如

我有以下格式的数据集:

Patient  Date       colA  colB
1        1/3/2015   .     5
1        2/5/2015   3     10
1        3/5/2016   8     .
2        4/5/2014   2     .
2        etc
我试图在PANDAS中定义一个函数,它将唯一的患者作为一个项来处理,并迭代这些唯一的患者项,以便只保留每列的最新观察结果(用缺失或null替换所有其他值)。例如:对于患者1,输出将包含-

Patient  Date       colA  colB
1        1/3/2015   .     .
1        2/5/2015   .     10
1        3/5/2016   8     .
我知道我可以将以下内容与.apply()一起使用,但这不能解释重复的患者ID

def getrecentobs():
    for i in df['Patient']:
        etc
非常感谢任何帮助或指导。

我认为您可以使用将值
转换为
NaN
,然后使用创建
掩码
,最后应用
掩码

print df
   Patient      Date colA colB
0        1  1/3/2015    .    5
1        1  2/5/2015    3   10
2        1  3/5/2016    8    .
3        2  4/5/2014    2    .
4        2  5/5/2014    4    .

df['colA'] = pd.to_numeric(df['colA'], errors='coerce')
df['colB'] = pd.to_numeric(df['colB'], errors='coerce')
print df
   Patient      Date  colA  colB
0        1  1/3/2015   NaN     5
1        1  2/5/2015     3    10
2        1  3/5/2016     8   NaN
3        2  4/5/2014     2   NaN
4        2  5/5/2014     4   NaN

pandas中有一个名为last的函数,可与groupby一起使用,为给定groupby提供最后的值。我不知道为什么你需要空白行,但是如果你需要它们,你可以加入到原始数据帧上。很抱歉,排序存在,因为日期未在我的示例数据中排序。希望有帮助

例如:

数据帧

     id        date     amount  code
  0  3107  2010-10-20   136.4004   290
  1  3001  2010-10-08   104.1800   290
  2  3109  2010-10-08   276.0629   165
  3  3001  2010-10-08  -177.9800   290
  4  3002  2010-10-08  1871.1094   290
  5  3109  2010-10-08   225.7038   155
  6  3109  2010-10-08    98.5578   170
  7  3107  2010-10-08   231.3949   165
  8  3203  2010-10-08   333.6636   290
  9 -9100  2010-10-08  3478.7500   290
如果不需要前面的行:

  b.sort_values("date").groupby(["id","date"]).last().reset_index()
groupby按“last”聚合数据,表示这些列的最后一个值

仅输出具有以下值的最新行:

   id        date     amount  code
0 -9100  2010-10-08  3478.7500   290
1  3001  2010-10-08  -177.9800   290 
2  3002  2010-10-08  1871.1094   290
3  3107  2010-10-08   231.3949   165
4  3107  2010-10-20   136.4004   290
5  3109  2010-10-08    98.5578   170
6  3203  2010-10-08   333.6636   290

我想你在找熊猫

例如,
df.groubpy('Patient').last()
将返回一个包含每个患者最后观察结果的数据帧。如果患者未按
date
排序,则可以使用
max
功能查找最新记录日期

df.groupby('Patient').last()
             Date colA colB
Patient                    
1        3/5/2016    8    .
2             etc    2    .
您可以创建自己的函数,然后调用的
apply()
函数

df.groupby('Patient').last()
             Date colA colB
Patient                    
1        3/5/2016    8    .
2             etc    2    .