通过接受字典作为inpu的自定义例程计算DataFrame列

2024-09-30 10:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

数据框中有数字列A1和A2

任务:在DataFrame中创建新列,这是以下逻辑步骤的结果:

步骤#1.为DataFrame中的每一行创建python字典。例如,对于第一行,它可能看起来像 {'A1':5,'A2':20}

第2步: 为步骤1中创建的每个python字典应用自定义例程pack(dictionary),该例程接受python字典并返回二进制对象

如果您好奇,这里定义了例程packhttps://github.com/adamchainz/mariadb-dyncol/blob/master/mariadb_dyncol/base.py 但这不重要

第3步:pack例程创建的二进制对象存储在新的DataFrame列中

我试图解决这个问题:

尝试#1. Create array of python dictionaries-number of dictionaries=DataFrame中的行数。将应用于每一本词典。在DataFrame中创建新列并按pack方法的结果填充它

问题:我不知道如何在不显式循环数据帧中的每一行的情况下高效地完成它。创建了许多中间对象

尝试#2.我知道如何在DataFrame中创建新的字符串列,它看起来像python字典,只有一行代码:

df['new']= '{"A1":'+str(df['A1'].item())+ 
           ',"A2":'+str(df['A2'].item()) +"}"

但是我需要将python字典而不是字符串输入到pack例程。 我正在考虑解决方法:介绍一个例程,该例程将读取上面构造的字符串,并将从字符串创建python字典,并将其传递给pack例程。但效率很低

我想避免在数据帧行上显式循环,但找不到方法


Tags: 数据对象方法字符串a2dataframedf字典
1条回答
网友
1楼 · 发布于 2024-09-30 10:28:19

第一步:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(5,2))

dicts = []
for row in df.itertuples():
    dicts.append({df.columns[0]: row._1, df.columns[1]: row._2})

您现在有了一个dicts列表

第二步:

packed_blobs = [pack(x) for x in dicts]

第三步:

dt = np.dtype(('column_name', 'blob_format'))
x = np.array(packed_blobs, dtype=dt)
df['new_col'] = x

我想这会管用的。你必须确保你知道打包的数据是什么样子的

有关blob格式的详细信息,请参见this structured array article

相关问题 更多 >

    热门问题