熊猫更好地修剪数据

时间:2016-04-20 20:23:53

标签: python database pandas

我目前的数据框看起来像这样:

df = pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [100,100,30,40],'CCC' : [100,100,30,-50]})

我也有数据框:

df1 = pd.DataFrame({'AAA' : [4], 'BBB' : [100]})

我在哪里定义

relevantColumns=['AAA','BBB']

这只是df1。

列的列表

我想找到df中出现df1的索引。我目前有一些看起来像这样的东西,

trueNFalses=(df==df1)[columnsToSort] #This generates a boolean dataframe

#Now I want to find the row with two trues in it, this is the row where df1 appears.

numTrues=trueNFalses.sum(axis=1)

#Now I look through numTrues and find the index of every values of 2,  
#because that is where there were two trues.

indices=numTrues[numTrues==len(columnsToSort)].axes

所以我做了一个非常圆的计算,只是为了得到df具有df1列的索引。我觉得这样做很傻,因为我几乎肯定必须有一个更好的方法来做大熊猫。我的技术也有一些缺点,我很乐意修复,但不知道如何。例如,我真的需要索引作为数据帧,但是我的代码是dtype对象的列表,这对于将来的处理来说是不方便的。

1 个答案:

答案 0 :(得分:2)

我认为您可以使用merge尝试reset_index,然后索引值位于index列中:

df = pd.DataFrame({'AAA' : [4,5,6,7], 
                   'BBB' : [100,100,30,40],
                   'CCC' : [100,100,30,-50]}, index=[2,3,4,5])

df1 = pd.DataFrame({'AAA' : [4], 'BBB' : [100]}, index=[8])

relevantColumns=['AAA','BBB']

print df
   AAA  BBB  CCC
2    4  100  100
3    5  100  100
4    6   30   30
5    7   40  -50

print df1
   AAA  BBB
8    4  100

print pd.merge(df.reset_index(), df1, on=relevantColumns, how='right')
   index  AAA  BBB  CCC
0      2    4  100  100

print pd.merge(df.reset_index(), df1, on=relevantColumns, how='right')['index']
0    2
Name: index, dtype: int64