Python Pandas 基于 y 列中的唯一值的子集 x 列值
Python Pandas subset column x values based on unique values in column y
我有一个数据框("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)。这意味着我需要从每个类别中 select 一个数据点,而不是仅对 "Data" 的唯一值进行子集化。
我的做法是这样的:
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'])
那我就可以为所欲为了。但问题是,这似乎是一种笨拙的、非 Python 式的做事方式。有什么建议么?
我认为你需要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
我有一个数据框("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)。这意味着我需要从每个类别中 select 一个数据点,而不是仅对 "Data" 的唯一值进行子集化。
我的做法是这样的:
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'])
那我就可以为所欲为了。但问题是,这似乎是一种笨拙的、非 Python 式的做事方式。有什么建议么?
我认为你需要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