Python 熊猫基于通配符输入特定ID
我有下面的数据框,其中一个实验可以有多行,因为每个实验都有不同的标记。我创建了一个名为“注册”字段的新列。基本上,我想通配符“多输入字段”,将包含此标记的所有实验都输入为注册字段。当我有多行用于单个实验,并且我想输入包含此标记的每个实验时,我如何做到这一点 这是我的DFPython 熊猫基于通配符输入特定ID,python,pandas,Python,Pandas,我有下面的数据框,其中一个实验可以有多行,因为每个实验都有不同的标记。我创建了一个名为“注册”字段的新列。基本上,我想通配符“多输入字段”,将包含此标记的所有实验都输入为注册字段。当我有多行用于单个实验,并且我想输入包含此标记的每个实验时,我如何做到这一点 这是我的DF experiment company tag sign_up_field 1 facebook Multiple input field NaN 1
experiment company tag sign_up_field
1 facebook Multiple input field NaN
1 facebook One button NaN
1 facebook Get Started NaN
我的预期产出是
experiment company tag sign_up_field
1 facebook Multiple input field 1
1 facebook One button 1
1 facebook Get Started 1
我试过了
df['sign\u field'].loc[df['tag'].str.contains('Multiple input field',flags=re.IGNORECASE)]=1
但这只会在我要插补所有3个时输入第一行,因为它们是相同的实验。如果我理解正确,您需要的是以下内容:
experiments=df.loc[df['tag'].str.contains('Multiple input field',flags=re.IGNORECASE),'experiments']
df.loc[df['experiment'].isin(experiments),'sign_up_field']=1
考虑到字符串是完全匹配的,而不是正则表达式,您可以更简洁:
experiments=df.loc[df['tag']=='Multiple input field','experiments']
df.loc[df['experiment'].isin(experiments),'sign_up_field']=1
如果experiment
是索引而不是列,则需要更改此行:
experiments=df.loc[df['tag']=='Multiple input field','experiments']
对于这一点:
experiments=df.loc[df['tag']=='Multiple input field'].index
尝试两个步骤转换
df['sign_up_field'] = df['tag'].str.contains('Multiple input field', flags=re.IGNORECASE)]
df['sign_up_field'] = df.groupby('experiment')['sign_up_field'].transform('any')
这太棒了。如果有多个像这样的实验需要通配符呢?有没有比每次为不同的通配符创建一个实验变量更好的方法?这适用于至少有一行“多输入字段”的任意数量的实验。如果您有多个字符串,则可以执行
df['tag'].isin(['Multiple input field','Other string','A third string'])
而不是df['tag']==='Multiple input field'
。你应该用至少一根这样的弦来收集所有的实验。这就是你的意思吗?是的,但我试图在第一个方法中使用通配符语句,我可以为多个标记执行str.contains吗?是的,但看起来不太好。您需要在标记之间使用正则表达式表示“OR”,即管道(“|”)。例如,这与3行匹配:pd.Series(['A','B','C']).str.contains(“A | B | C”)
。如果答案解决了您的问题,请记住接受并向上投票!)