ValueError:尝试根据条件选择数据框中的行时,操作数不能与形状(6,)(0,)一起广播

时间:2018-11-02 18:03:04

标签: python pandas dataframe indexing

我有一个问题要问我的最后一个问题:Keep upper n rows of a pandas dataframe based on condition。使用第二个建议的答案,我的代码如下所示:

import pandas as  pd
x=2
y=2
df2 = pd.DataFrame({'x':[1,2,3,4], 'y':[2,2,2,2],'id':[1,2,3,4]})
df2_cut=df2[df2.index <= (df2[(df2.x == x) & (df2.y == y)]).index.tolist()]

这也很好,它是相同的,但是在那里有另一个数据框。

import pandas as  pd
x=2
y=2
df1 = pd.DataFrame({'x':[2,2,2,2], 'y':[1,2,3,4],'id':[1,2,3,4]})
df2 = pd.DataFrame({'x':[1,2,3,4], 'y':[2,2,2,2],'id':[1,2,3,4]})
df1_cut=df1.iloc[((df1['x'] == x) & (df1['y'] == y)).values.argmax():]
df2_cut=df2[df2.index <= (df2[(df1.x == x) & (df2.y == y)]).index.tolist()]

现在奇怪的是,我不明白的是:

import pandas as  pd
x=2
y=2                     #made a change here
df1 = pd.DataFrame({'x':[1,2,2,2], 'y':[1,2,3,4],'id':[1,2,3,4]})
df2 = pd.DataFrame({'x':[1,2,3,4], 'y':[2,2,2,2],'id':[1,2,3,4]})
df1_cut=df1.iloc[((df1['x'] == x) & (df1['y'] == y)).values.argmax():]
df2_cut=df2[df2.index <= (df2[(df1.x == x) & (df2.y == y)]).index.tolist()]

它与以前的代码相同,但是我将df1的第一个x值切换为1。在缩短df2的最后一行中,此更改使df2出现错误。这个怎么可能?

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-121-72d9d78368b9> in <module>()
4 df1 = pd.DataFrame({'x':[1,1,1,2,6], 'y':[5,6,7,7,9],'id':[1,2,3,4,5]})
5 df2 = pd.DataFrame({'x':[1,1,4,3,1,1], 'y':[1,1,5,9,2,2],'id':[1,2,3,103,22,90]})
----> 6 df2_cut=df2[df2.index <= (df2[(df1.x == x) & (df2.y == y)]).index.tolist()]
7 df1_cut=df1.iloc[((df1['x'] == x) & (df1['y'] == y)).values.argmax():]

~/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/base.py in _evaluate_compare(self, other)
3844                 else:
3845                     with np.errstate(all='ignore'):
-> 3846                         result = op(self.values, np.asarray(other))
3847 
3848                 # technically we could support bool dtyped Index

ValueError: operands could not be broadcast together with shapes (6,) (0,) 

有人知道这种情况是如何发生的,或者有人对解决我的问题有其他想法吗? 如果有人对解决我的问题有其他想法,我将很高兴听到。基本上,我有两个以x-y坐标和id作为列的数据框。现在,我想给一个具有xy值的所谓交点,以删除数据帧1上满足x等于条件的行下的所有行。 x-column的值和y等于y-column的值。对于数据框2来说是相同的,但是要删除条件上方的行。这样,我想获得2个数据帧(一个以给定的x-y coordinates结尾,另一个以它开头)。我想互相追加/合并以获取新的数据框。数据帧可以重复,并且可能会发生从坐标(1,2)直接跳到(1,4)的跳跃,而没有中间步骤(1,3)

以下是我将获得上述值的示例:

df1_cut = pd.DataFrame({'x':[2,2], 'y':[1,2],'id':[1,2]})
df2_cut = pd.DataFrame({'x':[2,3,4], 'y':[2,2,2],'id':[2,3,4]})
df_list=[]
df_list.append(df1_cut)
df_list.append(df2_cut)
df_final = pd.concat(df_list, ignore_index=True)

我希望它可以与任何数据框一起使用。

0 个答案:

没有答案