[英]how to make a certain values of a column value to zero based on another column' value in Python
[英]Python: if a value in a column equals any value in another column, turn both values to zero
我希望我在思考python問題時能得到一些幫助。 我有一個總帳數據,想刪除任何應計項目或將其歸零。 所有這些意味着,我想在一列中找到一個數字,然后在另一列中進行搜索。 如果找到匹配項,我想將兩個數字(可迭代數字和找到的數字)都設為零。
我知道我需要使用某種可迭代的形式,如下所示:
for x in df[column 1]:
if x is in df[column 2]:
x == 0
df[column 2 [index?]] == 0
else:
continue
有人可以協助我編寫正確的代碼來實現這一目標嗎? 我的目標是從本質上講兩個對象遍歷兩列,找到兩個值匹配的地方,然后將這些值設為0。謝謝。
您將需要使用枚舉來獲取索引,以便將列表中的值設置為零:
for i, x in enumerate(df[col1]):
matches = [j for j, y in enumerate(df[col2].isin([x])) if y is True]
if len(matches) == 0: continue
df[col1][i] = 0
k = matches[0]
df[col2][k] = 0
如果df [col1]中的元素多次出現在df [col2]中,則只會將第一個出現的位置設置為0。
如果要刪除所有出現的內容,可以使用以下代碼:
for i, x in enumerate(df[col1]):
matches = [j for j, y in enumerate(df[col2].isin([x])) if y is True]
if len(matches) == 0: continue
df[col1][i] = 0
for k in matches:
df[col2][k] = 0
您可以使用以下any
方法執行此操作:
list = ["one", "two", "three"]
foo = ["bannana", "apple", "two", "blue"]
o = []
for x in foo:
if any(n in x for n in list):
o.append(0)
else:
o.append(x)
print(o)
如果在list
找到匹配項,則它循環遍歷foo
並將零添加到輸出列表;否則,如果找不到匹配項,則返回值:
['bannana', 'apple', 0, 'blue']
實際上,這比我以前的回答要好得多-使用列表理解:
foo = [[1, 2, 3, 5], [9, 7, 2, 4]]
for x in foo[1]:
if x in foo[0]:
foo[0] = [0 if i == x else i for i in foo[0]]
foo[1] = [0 if i == x else i for i in foo[1]]
print(foo)
foo[0]
是要檢查的項目的列表,而foo[1]
是要檢查的項目的列表。 輸出[[1, 0, 3, 5], [9, 7, 0, 4]]
。
import numpy as np
idx = np.flatnonzero(df['col1'] == df['col2'])
df['col1'][idx] = 0
df['col2'][idx] = 0
您可以使用numpy.allclose()
代替近似相等來測試近似相等:
idx = np.flatnonzero(np.allclose(df['col1'], df['col2']))
我認為您可以使用isin
df[column 1] = df[column 1] * (~df[column 1].isin(df[column 2])
df[column 2] = df[column 2] * (~df[column 2].isin(df[column 1])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.