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 将特定列中的行值复制到新列中