如何以更简洁的方式填充数据帧?

2024-04-20 11:51:56 发布

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

我使用一些列表来填充数据帧。在本例中,我有3列(a、b、c),我需要从3列的所有组合中填充一个数据帧:

import pandas as pd

df = pd.DataFrame(columns=['a', 'b', 'c'])
for a in np.linspace(1, 100, 20):
    for b in np.linspace(10, 1000, 10):
        for c in [1,4,9]:
            df = df.append({'a':a, 'b':b, 'c':c}, ignore_index=True)

上面的代码可以工作,但使用的for循环数与dataframe中的列数相同。是否有一种更简洁/更通俗的方法来填充数据帧


2条回答

创建数组并取笛卡尔积itertools.product提供了一种简单的方法

import pandas as pd
import numpy as np
from itertools import product

a = np.linspace(1, 100, 20)
b = np.linspace(10, 1000, 10)
c = [1, 4, 9]

df = pd.DataFrame(product(a, b, c), columns=['a', 'b', 'c'])

         a       b  c
0      1.0    10.0  1
1      1.0    10.0  4
2      1.0    10.0  9
3      1.0   120.0  1
4      1.0   120.0  4
..     ...     ... ..
595  100.0   890.0  4
596  100.0   890.0  9
597  100.0  1000.0  1
598  100.0  1000.0  4
599  100.0  1000.0  9

[600 rows x 3 columns]

您可以执行以下操作:

import itertools

l=[i for i in itertools.product(np.linspace(1, 100, 20), np.linspace(10, 1000, 10), [1,4,9])]
df=pd.DataFrame(l, columns=['a', 'b', 'c'])

相关问题 更多 >