【问题标题】:Must pass DataFrame with boolean values only after 71 iterations只有在 71 次迭代后才必须传递带有布尔值的 DataFrame
【发布时间】:2019-04-27 09:25:19
【问题描述】:

我查看了帖子,但没有找到解决问题的方法。代码正常运行后,我收到了我在主题中输入的错误。

我只是想向持有人数据框添加一行,该数据框仅追加与以前追加的行不相似的行。您会看到在查询中针对“目标”和“朋友”对朋友进行了检查。

它在给我错误之前迭代了 71 次。 'cur' 是迭代器,不包含在这部分代码中。代码如下:

same = df[(df['Source']==cur) & (df['StratDiff']==0)]
holder = pd.DataFrame(index=['pbp'],columns=['Source', 'Target', 'Friend', 'SS', 'TS', 'FS'])
holder.iloc[0:0]
i=1
for index, row in same.iterrows():
    Target = row['Target']
    stratcur = row['SourceStrategy'] 
    strattar = row['TargetStrategy']
    sametarget = df[(df['Source']==Target)]
    samejoin = pd.merge(same, sametarget,  how='inner', left_on=['Target'], 
                        right_on = ['Target'])
    for index, row in samejoin.iterrows():
        Friend = row['Target']
        stratfriend = row['TargetStrategy_x']
        #print(cur, Friend, Target)
        temp = holder[holder[(holder['Source']==cur) & 
                             (holder['Target']==Friend) & (holder['Friend']==Target)]]
        if temp.isnull().values.any():
            holder.loc[i] = [cur,Target,Friend,stratcur,strattar,stratfriend]
            print(i, cur)
            i=i+1

【问题讨论】:

  • 你想用这段代码实现什么?如果您提供一些示例数据和预期输出,可能会有更短、更快的解决方案,可能涉及drop_duplicates
  • 感谢您的回复!我正在计算网络中的黑社会,并想自己编程。基本上,cur 是每个节点的唯一 ID。朋友和目标是另外两个元素。如果我们进入第三个循环,他们都有共同的“友谊”。如果只是通过网络枚举,我最终得到: cur T Fr 1 2 3 1 3 2 2 3 1 2 1 3 3 2 1 3 1 2 我只想为每个 cur 计算这两个。我想看看能不能让python来做。

标签: python pandas dataframe append valueerror


【解决方案1】:

我只想更新每个人。我能够解决这个问题。花了一段时间,但问题出在我查询持有人的位置。这太复杂了。我将其简化为多个更简单的查询。现在可以正常使用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多