熊猫将函数应用于数据框的每一行,以每个条目返回一个或多个新行

洛基K

我有一个类似以下的数据集:

import pandas as pd
df = pd.DataFrame([[[{'name': 'Joe', 'age': 32, 'category': 'A'}, {'name': 'Jane', 'age': 35, 'category': 'A'}]],
                   [[{'name': 'Beth', 'age': 33, 'category': 'B'}, {'name': 'Bob', 'age': 32, 'category': 'B'}]],
                   [[{'name': 'John', 'age': 35, 'category': 'C'}]],
                   [[{'name': 'Jill', 'age': 33, 'category': 'D'}]],
                   ], columns=['Entries'])

数据框只有一列(称为“条目”),其中每一行都包含一个或多个词典的列表。

我需要一种方法来将字典中每个键的数据帧转换为一列,并使值显示在那些对应的列中,如下所示:

    age category  name
0  32.0        A   Joe
1  35.0        A  Jane
2  33.0        B  Beth
3  32.0        B   Bob
4  35.0        C  John
5  33.0        D  Jill

目前,我有以下代码可以做到这一点:

df2 = pd.DataFrame()
for idx, row in df.iterrows():
    for entry in row.Entries:
        name = entry['name']
        age = entry['age']
        category = entry['category']

        single_entry = pd.Series({'name': name, 'age': age, 'category': category})
        df2 = df2.append(single_entry, ignore_index=True)

上面的代码可以正常工作,但是在我的实际数据集上却非常慢,该数据集有超过1,000,000行。

我考虑过使用内置的Pandas函数来利用它们的速度提升,例如apply函数,但是我不知道如何将其应用于这个特定问题。

什么是达到上述结果的更有效方法?

耶斯列尔

我建议将列表理解与平坦值一起使用以提高速度:

df = pd.DataFrame([y for x in df['Entries'] for y in x])

另一个想法:

from  itertools import chain

df = pd.DataFrame(chain.from_iterable(df['Entries'].tolist()))

print (df)
   name  age category
0   Joe   32        A
1  Jane   35        A
2  Beth   33        B
3   Bob   32        B
4  John   35        C
5  Jill   33        D

对于4万行,样本数据重复执行10000次的性能

df = pd.concat([df] * 10000, ignore_index=True)

In [222]: %timeit pd.DataFrame([y for x in df['Entries'] for y in x])
66.1 ms ± 770 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [223]: %timeit pd.DataFrame(chain.from_iterable(df['Entries'].tolist()))
60.9 ms ± 691 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [224]: %timeit pd.DataFrame(itertools.chain(*df.Entries.tolist()))
60.8 ms ± 237 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [225]: %timeit pd.DataFrame(sum(df.Entries.tolist(),[]))
3.94 s ± 18.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [226]: %timeit pd.DataFrame(df['Entries'].explode().tolist())
131 ms ± 3.28 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R将函数应用于数据框的每一行,将结果存储在同一数据框的新列中

来自分类Dev

将函数应用于ndarray的每一行

来自分类Dev

将函数应用于ndarray的每一行

来自分类Dev

R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

来自分类Dev

熊猫的DataFrame重复每一行,将更改应用于重复项,然后组合回一个数据帧

来自分类Dev

如何将函数应用于熊猫中每一行的对象属性

来自分类Dev

创建一个将方程式应用于每一行的用户定义函数

来自分类Dev

R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

来自分类Dev

R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

来自分类Dev

将功能应用于熊猫数据帧的每一行-快速

来自分类Dev

通过将函数应用于数据框的每一行来创建具有命名值的列表

来自分类Dev

将多个函数应用于numpy数组的每一行

来自分类Dev

将函数应用于引用前一行数据的数据框行

来自分类Dev

重塑熊猫数据框:每76个条目有一个新行

来自分类Dev

Pandas_udf 问题:将函数应用于数据为 ArrayType 的每一行

来自分类Dev

如何使用来自另一个矩阵对应行的参数将函数应用于矩阵的每一行

来自分类Dev

将python日志记录格式应用于包含新行的消息的每一行

来自分类Dev

R-将3个参数函数应用于3列矩阵的每一行,并使用3列的每个值作为参数

来自分类Dev

将功能分别应用于每一行

来自分类Dev

将.isin应用于熊猫的每一行的有效方法

来自分类Dev

如何映射一个函数以仅应用于数据框中的某些行?

来自分类Dev

Nodejs - 如何将函数应用于两个流的每一行组合?

来自分类Dev

创建一个新列,其中列出了熊猫数据框每一行的最大频率值

来自分类Dev

将多个功能应用于输入的每一行

来自分类Dev

通过将函数应用于另一个数据框的列来创建新的数据框

来自分类Dev

使用聚合将多个函数应用于数据框中的每一列

来自分类Dev

将数学函数应用于大文件中的每一行

来自分类Dev

如何将函数应用于SparkR中的每一行?

来自分类Dev

R将计算应用于数据框的每一行和每一列

Related 相关文章

  1. 1

    R将函数应用于数据框的每一行,将结果存储在同一数据框的新列中

  2. 2

    将函数应用于ndarray的每一行

  3. 3

    将函数应用于ndarray的每一行

  4. 4

    R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

  5. 5

    熊猫的DataFrame重复每一行,将更改应用于重复项,然后组合回一个数据帧

  6. 6

    如何将函数应用于熊猫中每一行的对象属性

  7. 7

    创建一个将方程式应用于每一行的用户定义函数

  8. 8

    R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

  9. 9

    R:按因子将函数应用于数据帧的每一行,在函数中调用一个值(按因子)

  10. 10

    将功能应用于熊猫数据帧的每一行-快速

  11. 11

    通过将函数应用于数据框的每一行来创建具有命名值的列表

  12. 12

    将多个函数应用于numpy数组的每一行

  13. 13

    将函数应用于引用前一行数据的数据框行

  14. 14

    重塑熊猫数据框:每76个条目有一个新行

  15. 15

    Pandas_udf 问题:将函数应用于数据为 ArrayType 的每一行

  16. 16

    如何使用来自另一个矩阵对应行的参数将函数应用于矩阵的每一行

  17. 17

    将python日志记录格式应用于包含新行的消息的每一行

  18. 18

    R-将3个参数函数应用于3列矩阵的每一行,并使用3列的每个值作为参数

  19. 19

    将功能分别应用于每一行

  20. 20

    将.isin应用于熊猫的每一行的有效方法

  21. 21

    如何映射一个函数以仅应用于数据框中的某些行?

  22. 22

    Nodejs - 如何将函数应用于两个流的每一行组合?

  23. 23

    创建一个新列,其中列出了熊猫数据框每一行的最大频率值

  24. 24

    将多个功能应用于输入的每一行

  25. 25

    通过将函数应用于另一个数据框的列来创建新的数据框

  26. 26

    使用聚合将多个函数应用于数据框中的每一列

  27. 27

    将数学函数应用于大文件中的每一行

  28. 28

    如何将函数应用于SparkR中的每一行?

  29. 29

    R将计算应用于数据框的每一行和每一列

热门标签

归档