ValueError异常:操作数不能与形状(6)一起广播(0,)当试图选择在数据帧的行基于条件(Va

2019-10-29 18:33发布

我有一个问题,指的是我最后一个问题: 请根据条件的大熊猫数据框的上部n行 。 使用第二所建议的回答我的代码看起来像这样:

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()]

这是一样的代码像以前一样,但我换第x为1 DF1的值缩短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,) 

任何一个知道如何出现这种情况或如何解决我的问题任何其他的想法? 如果任何人对如何解决我的问题的另一个想法,我会很高兴听到这个消息。 基本上,我有两个dataframes与xy坐标和id为列。 现在我想给出与所谓的交点xy值,删除在数据帧1中是满足该条件下排中的所有行x等于x-column值和y等于y-column值。 对于数据框2一样的,但要删除的条件之上的行。 这样,我想2个dataframes(一端与给定的xy coordinates与它的另一场首发)。 我想CONCAT追加/对方得到一个新的数据帧。 所述dataframes可具有重复和可能发生的是,有像从坐标(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)

我想这与任何dataframes工作。

文章来源: ValueError: operands could not be broadcast together with shapes (6,) (0,) when trying to select rows in dataframe based on condition