如何选择具有[nbr]列包含不同值的行。
某些[st_id]可能只有一条记录。
st_id trc dir nbr
88900 4009114 1 2
88900 4009114 2 2
88000 4009115 1 2
88000 4009115 2 2
88300 4009113 1 3
88300 4009113 2 2
88400 4009110 1 4
88500 5120012 1 1
88500 5120013 2 2
88600 1270081 1 3
结果:
st_id trc dir nbr
88300 4009113 1 3
88300 4009113 2 2
88500 5120012 1 1
88500 5120013 2 2
答案 0 :(得分:0)
您可以首先使用drop_duplicates
为每个st_id, nbr
对获取一行,然后仅groupby
用st_id
查找其中多个{{1} }存在:
nbr
答案 1 :(得分:0)
您的数据:
st_id trc dir nbr
0 88900 4009114 1 2
1 88900 4009114 2 2
2 88000 4009115 1 2
3 88000 4009115 2 2
4 88300 4009113 1 3
5 88300 4009113 2 2
如果使用的是熊猫数据框,则可以使用交叉表。然后将交叉制表转换为DataFrame。请注意,您已经在概念上将nbr
变量转换为类别(nbr = 2或nbr = 3),因此,我将新列(告诉您它们属于2或3属于哪个nbr类)重命名为列:nbr_2
,nbr_3
pd.crosstab([df.st_id, df.trc,df.dir], df.nbr)
df.reset_index(inplace=True)
df.columns=['st_id', 'trc', 'dir', 'nbr', 'nbr_2','nbr_3']
>>>
st_id trc dir nbr nbr_2 nbr_3
0 88000 4009115 1 2 1 0
1 88000 4009115 2 2 1 0
2 88300 4009113 1 3 0 1
3 88300 4009113 2 2 1 0
4 88900 4009114 1 2 1 0
5 88900 4009114 2 2 1 0
您可以根据需要查找与交叉表有关的列。
如果要对所有nbr = 2的行进行排序
然后您可以使用:
df[df.nbr==2]
>>>
st_id trc dir nbr
0 88900 4009114 1 2
1 88900 4009114 2 2
2 88000 4009115 1 2
3 88000 4009115 2 2
5 88300 4009113 2 2
或
df[df.nbr==3]
...