python - 如何计算列 Pandas 数据框中列表的平均值

标签 python pandas split mean

我有数据看起来像这样

data={"col1":[ [(1,22),(1.5,20),(3,32),(2,21)],
              [(2,24),(2.5,22)],
      [(6,12),(1.3,18),(5,21)],
              [(4,25),(5,33),(7,21),(2,30)]],
"name":["A","B","C","F"]}
df=pd.DataFrame.from_dict(data)
print(df)
我想指的是第一个和第二个
每行中的数字(列出)两个不同的 colls 所以
对于第一个单元格,我将获得包含的新 coll
(1+1.5+3+2)\4 和另外一个具有 22+20+32+21/4 的列
我做了类似的事情,但它的循环看起来很乱
for i in df["col1"]:
    mean_list = []
    for first_numb in i:
        mean_list.append(first_numb[0])
任何的想法?

最佳答案

我们可以试试exploding并从分解的列创建一个新的数据框,然后计算 meanlevel=0

e = df['col1'].explode()
df[['m1', 'm2']] = pd.DataFrame([*e], index=e.index).mean(level=0)
list 的替代方法理解
df[['m1', 'm2']] = pd.DataFrame([[sum(t) / len(t) for t in zip(*l)]
                                 for l in df['col1']], index=df.index)
                                     col1 name     m1     m2
0  [(1, 22), (1.5, 20), (3, 32), (2, 21)]    A  1.875  23.75
1                    [(2, 24), (2.5, 22)]    B  2.250  23.00
2           [(6, 12), (1.3, 18), (5, 21)]    C  4.100  17.00
3    [(4, 25), (5, 33), (7, 21), (2, 30)]    F  4.500  27.25
性能检查
# Sample df with 40000 rows
df = pd.concat([df] * 10000, ignore_index=True)


%%timeit
e = df['col1'].explode()
pd.DataFrame([*e], index=e.index).mean(level=0)
# 107 ms ± 1 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit
pd.DataFrame([[sum(t) / len(t) for t in zip(*l)] for l in df['col1']], index=df.index)
# 50.5 ms ± 582 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

关于python - 如何计算列 Pandas 数据框中列表的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67297397/

相关文章:

python - 适用于 Mac 的 native Python 编辑器?

python - 如何以百分比形式获取列的出现频率

python - 在 Pandas 中找到区间的交集

linux - 替代创建多部分 .tar.gz 文件?

python - 如何分组应用聚合回到 Python Pandas 中的数据框?

python - 如何从 Django 中的错误电子邮件中删除敏感信息

python - 如何使用 Tensorboard 检测消失和爆炸梯度?

Python:计算数据框中列的减法

java - 分割字符串无法与 (|) 运算符一起正常工作

import - 如何从不同的 osgi 包中导入相同的包?