gpt4 book ai didi

python - 通过采用列输入的函数将 pandas Dataframe 转换为字典

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:22 29 4
gpt4 key购买 nike

我有以下 pandas Dataframe:

dict1 = {'file': ['filename2', 'filename2', 'filename3', 'filename4', 'filename4', 'filename3'], 'amount': [3, 4, 5, 1, 2, 1], 'front':[21889611, 36357723, 196312, 11, 42, 1992], 'back':[21973805, 36403870, 277500, 19, 120, 3210]}

df1 = pd.DataFrame(dict1)
print(df1)

file amount front back
0 filename2 3 21889611 21973805
1 filename2 4 36357723 36403870
2 filename3 5 196312 277500
3 filename4 1 11 19
4 filename4 2 42 120
5 filename3 1 1992 3210

我的任务是在 frontback 之间进行 N 次随机抽取,其中 N 等于金额 中的值。将其解析到字典中。

逐行执行此操作对我来说很容易理解:

例如第 1 行

import numpy as np
random_draws = np.random.choice(np.arange(21889611, 21973805+1), 3)

例如第 2 行

random_draws = np.random.choice(np.arange(36357723, 36403870+1), 4)

通常使用 pandas,用户可以将其定义为函数并使用类似的内容

def func(front, back, amount):
return np.random.choice(np.arange(front, back+1), amount)

df["new_column"].apply(func)

但是我的函数的结果是一个不同大小的数组。

我的第二个问题是我希望输出是一个字典,格式为

{file: [random_draw_results], file: [random_draw_results], file: [random_draw_results], ...}

对于上面的示例df1,该函数应输出此字典(给定抽奖):

final_dict = {"filename2": [21927457, 21966814, 21898538, 36392840, 36375560, 36384078, 36366833], 
"filename3": 212143, 239725, 240959, 197359, 276948, 3199],
"filename4": [100, 83, 15]}

最佳答案

使用apply时,我们可以通过axis=1来对行进行操作。然后我们需要告诉要使用哪些列并返回一个列表。

然后我们要么执行某种形式的 groupby,要么使用 defaultdict,如下所示:

dict1 = {'file': ['filename2', 'filename2', 'filename3', 'filename4', 'filename4', 'filename3'], 'amount': [3, 4, 5, 1, 2, 1], 'front':[21889611, 36357723, 196312, 11, 42, 1992], 'back':[21973805, 36403870, 277500, 19, 120, 3210]}

import numpy as np
import pandas as pd

def func(x):
return np.random.choice(np.arange(x.front, x.back+1), x.amount).tolist()

df1 = pd.DataFrame(dict1)
df1["new_column"] = df1.apply(func, axis=1)

df1.groupby('file')['new_column'].apply(sum).to_dict()

返回:

{'filename2': [21891765,
21904680,
21914414,
36398355,
36358161,
36387670,
36369443],
'filename3': [240766, 217580, 217581, 274396, 241413, 2488],
'filename4': [18, 96, 107]}
<小时/>

将使用Alt2(通过我运行的一些小时间,它看起来运行得一样快):

from collections import defaultdict

d = defaultdict(list)

for k,v in df1.set_index('file')['new_column'].items():
d[k].extend(v)

关于python - 通过采用列输入的函数将 pandas Dataframe 转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47801211/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com