python - 有没有一种有效的方法可以在大型 pandas 数据框中选择多行?

标签 python pandas numpy dataframe

我正在开发一个大约有 1 亿行和 2 列的大型 pandas adatframe。我想迭代数据帧并根据 col1 和 col2 的值有效地设置第三列。这就是我目前正在做的事情 -

df[col3] = 0
for idx, row in df.iterrows():
    val1 = row[col1]
    val2 = row[col2]
    df1 = df.loc[(df.col1 == val2) & (df.col2 == val1)]
    if len(df1) > 0:
        df.loc[(df.col1 == val2) & (df.col2 == val1), col3] = 1
Example:
    df = pd.DataFrame({'col1':[0,1,2,3,4,11], 'col2':[10,11,12,4,3,0]})
    >> df.head()
        col1 col2
     0  0   10
     1  1   11
     2  2   12
     3  3   4
     4  4   3
     5  3   10
    I want to add 'col3' such that last 2 rows of the third column are
    1. Think of it as a reverse_edge column which is 1 when for each 
    (val1, val2) in col1, col2 there is a (val2, val1) in col1, col2
        col1    col2    col3
      0 0        10      0
      1 1        11      0
      2 2        12      0
      3 3        4       1
      4 4        3       1
      5 11       0       0

进行此计算最有效的方法是什么?目前我需要几个小时才能遍历整个数据框。

编辑:将 col1 中的每个值和 col2 中的相应值视为图中的一条边 (val1 -> val2)。我想知道是否存在反向边(val2 -> val1)。

最佳答案

我的解决方案是将框架合并到自身(将第 2 列合并到第 1 列),然后检查其他两列是否相同:这意味着相反的情况也存在:

df2 = df.merge(df, how='left', left_on='col2', right_on='col1')
df['rev_exists'] = (df2['col1_x'] == df2['col2_y']).astype(int)
df
#   col1  col2  rev_exists
#0     0    10           0
#1     1    11           0
#2     2    12           0
#3     3     4           1
#4     4     3           1
#5    11     0           0

关于python - 有没有一种有效的方法可以在大型 pandas 数据框中选择多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55439420/

相关文章:

python - telnetlib.write() 不复制 telnet.interact()

python - Pandas 按多列上的多个自定义聚合函数分组

java - 有人知道如何自动在手机屏幕上找到坏点吗?

python - 将列表拆分为不同长度的 block

使用 Groupby 的 Python Pandas 条件和

python - 如何将 panda DataFrame 中的特定范围的元素转换为 float ?

python - 使用 pandas 操作创建派生列

python - 欧氏距离的迭代计算

python - 尽可能快地在 python 中导入大的 tecplot block 文件

python - 如何量化模型预测是否与 Python 中的预期值接近?