说我有以下数据框:
//right
<button type="button" ng-click="emitEvent()" class="btn btn-info img-center">{{name}}</button>
//right controller
$scope.emitEvent = function(){
$scope.$emit('changeAnimal');
}
//left controller
$scope.$on('changeAnimal', function(event){
//do stuff
})
我想删除&#34; Var1&#34;中存在重复的案例,但我想确保保留的副本是&#39; Var1&#39; ==&# 39; VAR2&#39;
我的输出数据框是:
>>> import pandas as pd
>>>
>>> d=pd.DataFrame()
>>>
>>> d['Var1']=['A','A','B','B','C','C','D','E','F']
>>> d['Var2']=['A','Z','B','Y','X','C','Q','N','P']
>>> d['Value']=[34, 45, 23, 54, 65, 77,100,102,44]
>>> d
Var1 Var2 Value
0 A A 34
1 A Z 45
2 B B 23
3 B Y 54
4 C X 65
5 C C 77
6 D Q 100
7 E N 102
8 F P 44
>>>
有关如何做到这一点的任何建议?使用groupby过滤器是最好的方法吗?
答案 0 :(得分:2)
这是一个单行:
>>> d.loc[~d.Var1[(d.Var1 == d.Var2).argsort()].duplicated('last')]
Var1 Var2 Value
0 A A 34
2 B B 23
5 C C 77
6 D Q 100
7 E N 102
8 F P 44
如果您希望(Var1
)准确获取您发布的输出,则可以在d.set_index('Var1')
上设置索引。
要打破它:
d.Var1[(d.Var1 == d.Var2).argsort()]
是一系列Var1
中的值,其排列方式是Var1 == Var2
在最后的行
~d.Var1[(d.Var1 == d.Var2).argsort()].duplicated('last')
适用于Var1
不重复的行;如果有重复,我们选择最后一个(因此Var1 == Var2
具有优先权)
答案 1 :(得分:0)
我的建议是将Var 2和Value作为字典创建。
d['Var1']=['A','A','B','B','C','C','D','E','F']
d['Var2']=['A','Z','B','Y','X','C','Q','N','P']
d['Var2Val'] = {'A':34,'Z':45,'B':23,'Y':54,'X':65,'C':77,'Q':100,'N':102,'P':44}
然后我会为Var1创建一个没有重复项的列表,如果它们在Var2中则打印出来
for x in d['Var1']:
if d['Var1'][x] in d['Var2']:
然后打印表
至少这是最简单的方法,即使它可能有点长