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

Posted

技术标签:

【中文标题】Python Pandas 子集列 x 值基于列 y 中的唯一值【英文标题】:Python Pandas subset column x values based on unique values in column y 【发布时间】:2017-04-02 11:44:03 【问题描述】:

我有一个数据框(“df”)相当于:

   Cat   Data
    x    0.112
    x    0.112
    y    0.223
    y    0.223
    z    0.112
    z    0.112

换句话说,我有一个类别列和一个数据列,并且数据值在类别列的值内没有变化,但它们可能会在不同类别之间重复(即类别'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'])

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

【问题讨论】:

【参考方案1】:

我觉得你需要drop_duplicates:

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

或者:

#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

【讨论】:

最有用的。谢谢。虽然我实际上只想要数据,所以我认为我最终想要使用的是:new_frame = df.loc[df.drop_duplicates('Cat').index,'Data'] 超级,另一种解决方案是print (x.drop_duplicates('Cat').drop('Cat', axis=1).squeeze())print (x.drop_duplicates('Cat').drop('Cat', axis=1)['Data'])

以上是关于Python Pandas 子集列 x 值基于列 y 中的唯一值的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 3.x 中将基于特定列的列和值的两个 DataFrame 与 Pandas 合并

Pandas:使用 apply 将特定列中的行值复制到新列中

Python - 基于列值(或子集)的分组(或循环)

Python散点图设计 - 根据其他列值为x轴选择变量的特定值

Pandas - 根据子集中的数据类型选择列

Pandas 中具有 NaN 值的子集列