2015-03-31 100 views
1
mukey cokey  hzdept_r hzdepb_r 
422927 11090397 0  20 
422927 11090397 20  71 
422927 11090397 71  152 
422927 11090398 0  18 
422927 11090398 18  117 
422927 11090398 117  152 

我想子集上面的数据框,以便只选择第一组的cokey(在本例中为11090397)。当然,由于这是一个样本数据集,因此解决方案需要扩展到这种数据框的更大版本。基于字段的子集数据帧

在这种情况下,所产生的数据集应该是:

mukey cokey  hzdept_r hzdepb_r 
422927 11090397 0  20 
422927 11090397 20  71 
422927 11090397 71  152 

我一直在使用GROUPBY尝试过,但不知道如何从中选择只有第一个cokey值。

回答

1

另一种方法是只取前独特的价值:

In [97]: 

df[df['cokey'] == df['cokey'].unique()[0]] 
Out[97]: 
    mukey  cokey hzdept_r hzdepb_r 
0 422927 11090397   0  20 
1 422927 11090397  20  71 
2 422927 11090397  71  152 

您还可以使用基于整数索引,以获得用于过滤的第一个值:

In [99]: 

df[df['cokey'] == df['cokey'].iloc[0]] 
Out[99]: 
    mukey  cokey hzdept_r hzdepb_r 
0 422927 11090397   0  20 
1 422927 11090397  20  71 
2 422927 11090397  71  152 
+0

第一个唯一值在第一个值上有优势吗? – cphlewis 2015-03-31 22:35:28

+0

不是真的,它只是从df获取值的另一种方法。 – EdChum 2015-03-31 22:37:01

+0

独特的文档没有指定它维护顺序,tho。 – cphlewis 2015-04-01 00:06:16

2

如果你正在寻找的第一个所有cokey的的是等于DF,使用第一cokey的DF:

test[test['cokey'] == test.cokey[0]] 

编辑: @dsm是正确的,上面的代码你会给你索引零的cokey,所以如果你的df没有从零开始的自动增量索引,你可能不会得到实际的期望结果。而是使用:

test[test['cokey'] == test.iloc[0]['cokey']] 
+0

谢谢利亚姆,但硬编码11090397将无法工作,因为较大的数据帧可以具有其他cokey值。 – user308827 2015-03-31 20:54:35

+0

@ user308827啊,所以你只想要第一套,不管它是什么? – 2015-03-31 20:55:29

+0

准确!我会更新这个问题来反映这一点。 – user308827 2015-03-31 20:55:50

2

如果DF是样本数据框:

cokeys = set(df.cokey) #unique keys 
for k in cokeys: 
    print df[df.cokey==k] #sub-dataframes 

结果:

mukey  cokey hzdept_r hzdepb_r 
0 422927 11090397   0  20 
1 422927 11090397  20  71 
2 422927 11090397  71  152 
    mukey  cokey hzdept_r hzdepb_r 
3 422927 11090398   0  18 
4 422927 11090398  18  117 
5 422927 11090398  117  152 

如果你从字面上只想要第一个数据帧,让k=df.iloc[0].cokey