我希望通过将列减少为仅具有1个唯一值的列来过滤数据框。
采用以下数据框:
df = pd.DataFrame({'id':[4, 5],
'id2':[4, 4],
'prod':['prod1', 'prod1'],
'amount':[45.0, 45.0],
'date':['2018-06-06', '2018-05-06'],
'region':['east', 'east']})
我想按id2分组,然后删除唯一值超过1个的所有列。
df
amount date id id2 prod region
0 45.0 2018-06-06 4 4 prod1 east
1 45.0 2018-05-06 5 4 prod1 east
输出应如下所示:
amount id2 prod region
0 45.0 4 prod1 east
1 45.0 4 prod1 east
答案 0 :(得分:2)
您需要先{
"error":{
"errors":[
{
"domain":"global",
"reason":"forbidden",
"message":"Not Authorized to access this resource/api"
}
],
"code":403,
"message":"Not Authorized to access this resource/api"
}
}
,然后查找唯一值等于1的列。
groupby
输出:
col = (df.groupby(['id2']).nunique() == 1).any()
df[col.index[col]]
答案 1 :(得分:2)
由于id2具有一个唯一值,因此您也可以不使用groupby。
# count unique values per column
d = df.nunique(axis=0)
# select columns with 1 unique value
names = d[d == 1].index.tolist()
# get outpput
print(df[names])
amount id2 prod region
0 45.0 4 prod1 east
1 45.0 4 prod1 east
答案 2 :(得分:0)
在loc
内以利用布尔索引编制
df.loc[:, df.nunique().eq(1)]
id2 prod amount region
0 4 prod1 45.0 east
1 4 prod1 45.0 east
类似的答案,但改用lambda
。这样可以避免依赖两次引用df
并完全内联。
df.loc[:, lambda d: d.nunique().eq(1)]