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 .