Python Pandas子集列x值基于y列中的唯一值

Col*_*son 6 python indexing subset slice pandas

我有一个数据帧("df")相当于:

   Cat   Data
    x    0.112
    x    0.112
    y    0.223
    y    0.223
    z    0.112
    z    0.112
Run Code Online (Sandbox Code Playgroud)

换句话说,我有一个类别列和一个数据列,数据值不在类别列的值内变化,但它们可能在不同类别之间重复(即类别'x'和'z'中的值是相同 - 0.112).这意味着我需要从每个类别中选择一个数据点,而不是仅仅对"数据"的唯一值进行子集化.

我这样做的方式是这样的:

    aLst = []
    bLst = []
    for i in df.index:
        if df.loc[i,'Cat'] not in aLst:
            aLst += [df.loc[i,'Cat']]
            bLst += [i]

    new_series = pd.Series(df.loc[bLst,'Data'])
Run Code Online (Sandbox Code Playgroud)

然后我可以用它做任何我想做的事.但问题是,这似乎是一种笨拙,不py式的做事方式.有什么建议?

jez*_*ael 7

我想你需要drop_duplicates:

#by column Cat
print (df.drop_duplicates(['Cat']))
  Cat   Data
0   x  0.112
2   y  0.223
4   z  0.112
Run Code Online (Sandbox Code Playgroud)

要么:

#by columns Cat and Value
print (df.drop_duplicates(['Cat','Data']))
  Cat   Data
0   x  0.112
2   y  0.223
4   z  0.112
Run Code Online (Sandbox Code Playgroud)