如何检查列中的值是否存在于下一行中?

2024-05-23 18:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧,我想对其进行一些操作:

   AutoStudyID   DiagDate  DiagName
0           34 2010-09-23      Lung
1           34 2001-01-01      Skin
2           48 2008-01-01     Brain

如何使用pandas的强大功能来检查AutoStudyID后面紧跟着下一行相同的AutoStudyID的情况?你知道吗

例如如下两行:

0           34 2010-09-23      Lung
1           34 2001-01-01      Skin

我的最终目标是使数据帧每行只有一个唯一的AutoStudyID。而精致的AutoStudyID的数据应该通过创建新的列合并到一个惟一的列中,输出应该是这样的:

   AutoStudyID   DiagDate  DiagName    DiagDate2    DiageName2
0           34 2010-09-23      Lung   2001-01-01          Skin
1           48 2008-01-01     Brain

你知道怎么解决这个问题吗?你知道吗


Tags: 数据功能pandas情况skinbrainlungdiagename2
3条回答

下面将检查下一行中的值(对于数字和日期时间数据类型)是否相同?你知道吗

In [203]: df.AutoStudyID.diff() == 0
Out[203]:
0    False
1     True
2    False
Name: AutoStudyID, dtype: bool

In [204]: df[df.AutoStudyID.diff() == 0]
Out[204]:
   AutoStudyID    DiagDate DiagName
1           34  2001-01-01     Skin

或者更一般的方法(它也适用于strings):

In [206]: df.AutoStudyID.shift() == df.AutoStudyID
Out[206]:
0    False
1     True
2    False
Name: AutoStudyID, dtype: bool

iterrows()遍历行,并将字段AutoStudyID与最后找到的值进行比较。你知道吗

last = None
for i, row in df.iterrows():
    if last == df['AutoStudyID'][i]:
        print('I found it in position: %s' % i)
    else:
        last = df['AutoStudyID'][i]

尝试添加具有以下AutoStudio ID的新列:

df['next'] = df.AutoStudyID.shift(-1)
df

    AutoStudyID DiagDate    DiagName    next
0   34          2010-09-23  Lung        34
1   34          2001-01-01  Skin        48
2   48          2008-01-01  Brain       NaN

每一行都会有下一个的id。行应按AutoStudyID排序。你知道吗

您也可以尝试按AutoStudio ID分组:

df.groupby('AutoStudyID')

例如:

for group in df.groupby('AutoStudyID'):
    print(group)

有了这些小组,你就可以做你需要的事:

('34',   AutoStudyID    DiagDate DiagName next
0          34  2010-09-23     Lung   34
1          34  2001-01-01     Skin   48)
('48',   AutoStudyID    DiagDate DiagName next
2          48  2008-01-01    Brain  NaN)

相关问题 更多 >