我想创建自己的函数来扫描数据框中的多个用户指定的列,如果所有指定的列 == 1,该函数将创建一个新变量并将其分配为“1”,否则为 0。
在下面的代码中,如果用户正好输入要扫描的两列,我会考虑。
import numpy as np
class Tagger:
def __init__(self):
pass
def summing_all_tagger(self, df, tag_var_list, tag_value=1):
# This tagger creates a tag='1' if all variables in tag_var_list equals to tag_value; otherwise='0'
self.df = df
self.tag_var_list = tag_var_list
self.tag_value = tag_value
self.df['temp'] = np.where((self.df[self.tag_var_list[0]]==self.tag_value) &
(self.df[self.tag_var_list[1]]==self.tag_value), 1, 0)
return self.df_pin['temp']
然后我就可以在main.py文件中调用了:
import pandas as pd
import datetime
import feature_tagger.feature_tagger as ft
tagger_obj = ft.Tagger()
df_pin['PIN_RX&TIME_TAG'] = tagger_obj.summing_all_tagger(df_pin, tag_var_list=['PIN_RX_TAG', 'PIN_TIME_TAG'], tag_value=1)
我如何修改它以便用户可以根据需要为 tag_var_list
输入任意数量的列名?
比如
df_pin['PIN_RX&TIME_TAG'] = tagger_obj.summing_all_tagger(df_pin, tag_var_list=['PIN_RX_TAG', 'PIN_TIME_TAG', 'PIN_NAME_TAG'], tag_value=1)
# or
df_pin['PIN_RX&TIME_TAG'] = tagger_obj.summing_all_tagger(df_pin, tag_var_list=['PIN_RX_TAG'], tag_value=1)
最佳答案
np.all()
是你的 friend 。
self.df['temp'] = np.where(np.all(self.df[self.tag_var_list] == self.tag_value, axis=1), 1, 0)
关于python - 如何使我修改后的 pandas/numpy .where 函数适应不同大小的列表参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914893/