我有两个不同长度的数据框:
Df1 Df2
11 A12 11 B72
11 E17 12 F15
11 B72 13 C12
11 E15
11 C12
11 B2
43 C11
我正在尝试for
循环来计算Df1
中的所有行,直到1
中出现索引Df2
的值,但只有索引一样长0
中的Df2
与0
中的索引Df1
匹配。然后我想保存计算的内容并进行循环。
我尝试了各种for-while-if循环,但没有什么真正有用,这就是我遇到困难的地方(对于可怕的格式化抱歉):
for row_i in range(len(Df2)):
one_Df2=(Df2.iloc[row_i,1,])
two_Df2=((int(df.iloc[row_i,0,])))
for row_ii in range(len(df1)):
one_Df1=(df.iloc[row_ii,1,])
two_Df1=((int(df.iloc[row_ii,0,])))
if two_Df1==two_Df2:
if aoi_row_iiii is not aoi_row_iii:
counter_2=counter_2+1#--> count +1
else:
Df3.append(counter_2)
counter_2=0
然而,这个嵌套的for循环开始会导致堆栈溢出,并且没有任何反应。如果我一个接一个地打印并打印就可以了。任何人都可以帮助一个绝望的初学者吗?
答案 0 :(得分:0)
由于您没有为您的示例提供输出(我也尝试在源代码中提供数据,以便其他人可以轻松地将其用于测试目的),我会稍微猜测一下。
无论如何,请尝试查看以下配方是否符合您的要求。它依赖于嵌套循环和if
语句来表示您的标准:
df1 = np.array([['11', 'A12'],
['11', 'E17']
, ['11', 'B72']
, ['11', 'E15']
, ['11', 'C12']
, ['11', 'B2']
, ['12', 'F15']
, ['12', 'C12']
, ['12', 'B2']
, ['13', 'C13']
, ['13', 'B2']
, ['13', 'F15']
, ['13', 'C12']
, ['43', 'C11']])
df2 = np.array([['11', 'B72'],
['12', 'F15']
, ['13', 'C12']])
counter = []
for i in range(df2.shape[0]):
counter.append(0)
for j in range(df1.shape[0]):
if df1[j, 0] == df2[i, 0]:
if df1[j, 1] != df2[i, 1]:
counter[-1] += 1
elif df1[j, 1] == df2[i, 1]:
counter[-1] += 1
break
print(counter)
,结果如下:
[3, 1, 4]
我已经为您的df1
添加了几点,以便检查是否每个条件都遵循我从您的OP解释它的方式。另请注意,一旦达到其中一个停止条件,就使用break
来停止循环。
我使用numpy数组,因为它看起来与你在代码中所做的相似(尽管我怀疑你使用的是pandas;如果是这样的话,可能想把它放在标签中)。数组都是字符串,这就是我永远不会将任何内容转换为数字的原因。平等将起到同样的作用。