Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧上执行大量条件表达式以标记数据集的最佳方法_Python_Pandas_Labeling - Fatal编程技术网

Python 在数据帧上执行大量条件表达式以标记数据集的最佳方法

Python 在数据帧上执行大量条件表达式以标记数据集的最佳方法,python,pandas,labeling,Python,Pandas,Labeling,我正在寻找一种基于不同条件表达式标记大约10k+个事务的好方法,因为手工操作会花费很多时间 例如,如果交易名称包含“Shell”,则标签将为“Transport”,如果名称包含“restaurant”,则标签将为“Food” 一种可能是创建一个for循环,但过一段时间就会变得一团糟。它将如下所示: for i in df_transactions.index: if 'Shell' in df_transactions['Name'][i]: df_transaction

我正在寻找一种基于不同条件表达式标记大约10k+个事务的好方法,因为手工操作会花费很多时间

例如,如果交易名称包含“Shell”,则标签将为“Transport”,如果名称包含“restaurant”,则标签将为“Food”

一种可能是创建一个for循环,但过一段时间就会变得一团糟。它将如下所示:

for i in df_transactions.index:
    if 'Shell' in df_transactions['Name'][i]:
        df_transactions['Label'][i] = 'Transport'
    if 'Restaurant' etc....
def load_label():

return {
    'Shell':'Transport',
    'Restaurant':'Food',
    etc
}

def labeling(name):
return LABEL[name] if name in LABEL else name

LABEL= load_label()

df_transactions['Label'] = df_transactions['Name'].map(labeling)
我还尝试了np.select,但如果多个条件之一正确,我需要指定一个值

我需要有标签的数据集,用机器学习来训练分类器。交易具有描述、金额、账号等特征

我无法收集业务合作伙伴或其他人标记的数据集


谢谢你的帮助

有多少种情况?如果仍然可以管理,您可以使用np。其中:

df_transactions['Label'] = np.where(df_transactions['Name']=='Shell','Transport',np.where(df_transactions['Name']=='Restaurant','Food',np.where(,,np.where(,,final label))))
如果有很多,我会这样做:

for i in df_transactions.index:
    if 'Shell' in df_transactions['Name'][i]:
        df_transactions['Label'][i] = 'Transport'
    if 'Restaurant' etc....
def load_label():

return {
    'Shell':'Transport',
    'Restaurant':'Food',
    etc
}

def labeling(name):
return LABEL[name] if name in LABEL else name

LABEL= load_label()

df_transactions['Label'] = df_transactions['Name'].map(labeling)
您只需要列出名称和标签对,就可以开始了。
希望这有帮助

所有条件都基于包含特定字符串的值吗?不,条件也基于转移的金额,例如,其正值或负值。正金额更可能是工资。我还将根据交易时间创建条件。例如,如果一笔交易发生在午夜之后,那么它可能不是一笔与食品杂货相关的交易。仍在定义它们。我最终会得到大约20个类别,每个类别可能有大约20个条件。啊,我明白了,我认为你需要先编辑示例,然后我们可以再次开始一起工作,因为就你当前的示例而言,它看起来只需要经过一层条件和多个类别。