给定以下数据帧:
data = [['2019-06-20 12:28:00', '05123', 2, 8888],
['2019-06-20 13:28:00', '55874', 6, 8888],
['2019-06-20 13:35:00', '12345', 1, 8888],
['2019-06-20 13:35:00', '35478', 2, 1234],
['2019-06-20 13:35:00', '12345', 2, 8888],
['2019-06-20 14:22:00', '98765', 1, 8888]]
columns = ['pdate', 'station', 'ptype', 'train']
df = pd.DataFrame(data, columns = columns)
其中'pdate'=通过时间,'station'=车站代码,'ptype'=通过类型,'train'=车次号
“ptype”可以有以下值(1=到达,2=离开,6=通过)
结果如下:
pdate station ptype train
0 2019-06-20 12:28:00 05123 2 8888
1 2019-06-20 13:28:00 55874 6 8888
2 2019-06-20 13:35:00 12345 1 8888
3 2019-06-20 13:35:00 35478 2 1234
4 2019-06-20 13:35:00 12345 2 8888
5 2019-06-20 14:22:00 98765 1 8888
不幸的是,有时在车站错误地输入“ptype”=6(通过),而不是同时输入“ptype”=1(到达)和“ptype”=2(离开)。所以这两个记录我必须考虑作为一个单一的通过记录
我必须从数据帧中删除ptype=6或(ptype=1的每一行,同一车站和同一车次的下一条记录ptype=2正好同时发生)
因此,在给定的示例中,我必须删除以下行(1、2、4)
我可以删除ptype=6的所有行
df = df.drop(df[(df['ptype']==6)].index)
但我不知道如何删除其他的一对。 你知道吗?你知道吗
这不是一个非常熊猫式的方法,但如果我理解你的目标是正确的,你实际上得到了你想要的结果
输出
以下是您的方法:
输出:
IIUC,你可以做
groupby
和nunique
:输出:
相关问题 更多 >
编程相关推荐