gpt4 book ai didi

python - 使用 pandas/numpy 进行高效的 p​​ython 数据转换

转载 作者:行者123 更新时间:2023-12-05 03:34:57 24 4
gpt4 key购买 nike

我得到了这样的 df:

cols=['a', 'b']
df = pd.DataFrame([[[3,1,5,7], [42,31]], [[],[44]], [[44,3,5,5,5,10],[]], [[], [44324,3]]],
columns=cols)

如您所见,每个单元格中都有列表。我想对每个元素进行以下操作:

  1. 计算列表的平均值并追加 5
  2. 如果结果 <= 0,加 1 代替列表
  3. 如果列表为空,则添加 0 代替列表

我的工作解决方案:

df
def convert_list(x):
if len(x) != 0:
res = (sum(x)/len(x)) + 5
if res <= 0:
res = 1
return res
return 0

for col in cols:
df[col] = df[col].apply(lambda x: convert_list(x))

期望的输出:

df

它正在工作,但它的解决方案非常慢(在原始 df 中我有大约 50k 列和 100k 行,并且列表可能包含许多元素)。有什么有效的解决方案吗?我也尝试将它转换为 numpy 数组并进行一些矢量化操作,但问题是每个列表的长度可能不同,所以我无法转换它(除非我向其他列表添加许多元素......)

最佳答案

您可以使用 applymapnp.mean 对每个单元格进行平均并加上 5。然后任何低于 5 的值都将是负平均值,并且可以填充 nans为零。

import pandas as pd
import numpy as np
cols=['a', 'b']
df = pd.DataFrame([[[3,1,5,7], [42,31]], [[],[44]], [[44,3,5,5,5,10],[]], [[], [44324,3]]],
columns=cols)


df = (df.applymap(np.mean)+5)
df[df<5]=1
df = df.fillna(0)

输出

      a        b
0 9.0 41.5
1 0.0 49.0
2 17.0 0.0
3 0.0 22168.5

关于python - 使用 pandas/numpy 进行高效的 p​​ython 数据转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70005428/

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