gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:05:02 26 4
gpt4 key购买 nike

我正在开发一个大约有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com