python:如何检查列项是否也是列表项

python:如何检查列项是否也是列表项,python,pandas,list,dataframe,filter,Python,Pandas,List,Dataframe,Filter,我尝试更改现有dataframe列的特定值(如果它们满足我的条件)。下面的代码可以很好地工作,我相信这可以用一种更准确的方式完成,但是优化现在不是问题 我的数据帧: df = pd.DataFrame({"list1": [0, 1, 2, 3, 4, 5], "list2": [1, 2, 3, 4, 5, 6]}) 到目前为止,我的代码是: def function(var, x, y): print(

我尝试更改现有dataframe列的特定值(如果它们满足我的条件)。下面的代码可以很好地工作,我相信这可以用一种更准确的方式完成,但是优化现在不是问题

我的数据帧:

df = pd.DataFrame({"list1": [0, 1, 2, 3, 4, 5],  
                   "list2": [1, 2, 3, 4, 5, 6]})
到目前为止,我的代码是:

def function(var, x, y):
   print("DF before:", var, sep="\n", end="\n\n")
   cond = [var["list1"] == x, var["list1"] == y]
   choice = [True, True]
   var["test"] = np.select(cond, choice)
   var["copy"] = np.where(var["test"], var["list1"], 0)
   var["changed"] = var.apply(lambda row: row["copy"] + (x*y) if row["copy"] else 0, axis=1)
   var["list1"] = var.apply(lambda row: row["changed"] if row["changed"] != 0 else row["list1"], axis=1)
   print("manipulated DF:", var, sep="\n", end="\n\n")
   var.drop(["test", "copy", "changed"])
   print("clean manipulated DF:", var, sep="\n", end="\n\n")

function(df, x=2, y=5)
在我的原始代码中,我的列表中有几个条目,如果满足,每个条目都应返回“True”。
吝啬鬼来了:
我尝试将列表添加为一个新列,以开始对其进行比较。但是,由于列表只是“list1”中值的一种选择,它永远不会达到相同的长度。因此,列表类似于
条件\u list=[1,3,5]

不幸的是,我还没有找到一种自动调整长度的方法,例如,为缺少的值插入0。即使是,下一个问题是:条目必须位于正确的位置,因此如果条件列表的项目是5,我需要将其放在“列表1”的第6行。
因此,我认为使用上面的代码,我可以只扫描列'list1'中的条目,从而只更改那些特定条目的值。但我不能让它工作。它只是更改我的列的第一个值(索引为0)或我列的每个条目,或者它不会发生任何变化,因为在
df[“test”]
中所有条目都设置为False 问题代码如下所示:

# list of entries have to be found in list1 to change values in list2
entries_to_met = [1, 3, 5]

def function2(var):
   print("DF before:", var, sep="\n", end="\n\n")
   cond = [var["list1"] == entries_to_met.item]
   choice = [True]
   var["test"] = np.select(cond, choice)
   var["copy"] = np.where(var["test"], var["list2"], 0)
   var["changed"] = var.apply(lambda row: row["copy"] + 15 if row["copy"] else 0, axis=1)
   var["list2"] = var.apply(lambda row: row["changed"] if row["changed"] != 0 else row["list2"], axis=1)
   print("manipulated DF:", var, sep="\n", end="\n\n")
   var.drop(["test", "copy", "changed"])
   print("clean manipulated DF:", var, sep="\n", end="\n\n")

function2(df)
我希望有人有主意。如果对这个问题有任何不清楚的地方:请随时提问。

编辑 因为它似乎需要更好的问题描述:我的输入看起来像:

# list of entries have to be found in list1 to change values in list2
entries_to_met = [1, 3, 5]

def function2(var):
   print("DF before:", var, sep="\n", end="\n\n")
   cond = [var["list1"] == entries_to_met.item]
   choice = [True]
   var["test"] = np.select(cond, choice)
   var["copy"] = np.where(var["test"], var["list2"], 0)
   var["changed"] = var.apply(lambda row: row["copy"] + 15 if row["copy"] else 0, axis=1)
   var["list2"] = var.apply(lambda row: row["changed"] if row["changed"] != 0 else row["list2"], axis=1)
   print("manipulated DF:", var, sep="\n", end="\n\n")
   var.drop(["test", "copy", "changed"])
   print("clean manipulated DF:", var, sep="\n", end="\n\n")

function2(df)
清单1 清单2 0 0 1. 1. 1. 2. 2. 2. 3. 3. 3. 4. 4. 4. 5. 5. 5. 6. 你想要这个吗

mask = (df['list1'].isin([1,3,5]))
df.loc[ mask, 'list2'] = df.loc[mask]['list2'] + 15
通过numpy:

import numpy as np
mask = (df['list1'].isin([1,3,5]))
df['list2'] = np.where(mask, df['list2']+15, df['list2'])
你想要这个吗

mask = (df['list1'].isin([1,3,5]))
df.loc[ mask, 'list2'] = df.loc[mask]['list2'] + 15
通过numpy:

import numpy as np
mask = (df['list1'].isin([1,3,5]))
df['list2'] = np.where(mask, df['list2']+15, df['list2'])
将熊猫作为pd导入
df=pd.DataFrame({“list1”:[0,1,2,3,4,5],
“列表2:[1,2,3,4,5,6]})
ltm=[1,3,5]
df.loc[df['list1'].isin(ltm),'list2']+=15
df
清单1 清单2 0 0 1. 1. 1. 17 2. 2. 3. 3. 3. 19 4. 4. 5. 5. 5. 21
将熊猫作为pd导入
df=pd.DataFrame({“list1”:[0,1,2,3,4,5],
“列表2:[1,2,3,4,5,6]})
ltm=[1,3,5]
df.loc[df['list1'].isin(ltm),'list2']+=15
df
清单1 清单2 0 0 1. 1. 1. 17 2. 2. 3. 3. 3. 19 4. 4. 5. 5. 5. 21
对不起,我不能清楚地理解这个问题。你能为一个给定的输入指定你想要的输出吗?如果我设置了一个类似“entries\u to\u met”的列表,我会尝试检查我的数据帧列“list1”的每一行,如果它匹配,我想更改列“list2”的相应条目。很抱歉,我不能清楚地理解这个问题。你能为一个给定的输入指定你想要的输出吗?如果我设置了一个类似“entries\u to\u met”的列表,我会尝试检查我的数据帧列“list1”的每一行,如果匹配,我想更改列“list2”的相应条目。到目前为止,numpy方法工作得很好,谢谢。但它也改变了“list2”(index=0)的第一个条目,以及它的最后一个条目(index=6)。@Grinnorye更新了我的答案。我要说的是使用
np。那里的
要快得多,所以numpy的方法很好用,谢谢。但它也改变了“list2”(index=0)的第一个条目,以及它的最后一个条目(index=6)。@Grinnorye更新了我的答案。我会说使用
np。其中
要快得多