2015-05-19 55 views
1

你好,我正在寻找一种方式,从这个数据帧得到DF ::获取有重复值的行的第一个版本与一列

df = pd.DataFrame(dict(X=list('abbcccddef'), 
         Y=list('ABCDEFGHIJ'), 
         Z=list('1234123412'))) 
    df 
    # X Y Z 
    # 0 a A 1 
    # 1 b B 2 
    # 2 b C 3 
    # 3 c D 4 
    # 4 c E 1 
    # 5 c F 2 
    # 6 d G 3 
    # 7 d H 4 
    # 8 e I 1 
    # 9 f J 2 

只有第一线每个X值,所以这一::

# X Y Z 
    # 0 a A 1 
    # 1 b B 2 
    # 3 c D 4 
    # 6 d G 3 
    # 8 e I 1 
    # 9 f J 2 

我正在寻找一种更优雅的方式比这::

x_unique = df.X.unique() 
    x_unique 
    # array(['a', 'b', 'c', 'd', 'e', 'f'], dtype=object) 

    res = df[df.X == x_unique[0]].iloc[0] 
    for u in x_unique[1:]: 
     res = pd.concat([res, df[df.X==u].iloc[0]], axis=1) 

    res 
    # 0 1 3 6 8 9 
    # X a b c d e f 
    # Y A B D G I J 
    # Z 1 2 4 3 1 2 

    res = res.transpose() 
    res 
    # X Y Z 
    # 0 a A 1 
    # 1 b B 2 
    # 3 c D 4 
    # 6 d G 3 
    # 8 e I 1 
    # 9 f J 2 

回答

1

你也可以这样做:

In [3]: import pandas as pd 

In [4]: df = pd.DataFrame(dict(X=list('abbcccddef'), 
        Y=list('ABCDEFGHIJ'), 
        Z=list('1234123412'))) 

In [5]: df.groupby('X').first() 
Out[5]: 
    Y Z 
X  
a A 1 
b B 2 
c D 4 
d G 3 
e I 1 
f J 2 
5

你可以使用drop_duplicates()方法上X

In [60]: df.drop_duplicates('X') 
Out[60]: 
    X Y Z 
0 a A 1 
1 b B 2 
3 c D 4 
6 d G 3 
8 e I 1 
9 f J 2