Numpy每个ID创建n行 | Pandas

Numpy每个ID创建n行 | Pandas

在本文中,我们将介绍如何在 NumPyPandas 中针对每个唯一值(ID)创建 n 行。这对于使用机器学习任务时,数据预处理和数据转换非常有用。

我们首先要在 Python 中安装 NumPyPandas 库以使用它们。安装方式如下:

!pip install numpy
!pip install pandas

接下来,我们来看看我们的数据集:

import pandas as pd

df = pd.DataFrame({'ID': ['A', 'B', 'A', 'C', 'D', 'B', 'C', 'A', 'D'],
                   'values': [10, 20, 30, 40, 50, 60, 70, 80, 90]})

print(df)

这是我们将要使用的示例数据集:

   ID  values
0  A      10
1  B      20
2  A      30
3  C      40
4  D      50
5  B      60
6  C      70
7  A      80
8  D      90

我们可以看到,有些值在不同的 ID 中出现多次。

阅读更多:Numpy 教程

NumPy

NumPy 是一个用于数值计算的 Python 库,它允许我们在一个 ndarray 对象上进行操作。

我们可以使用 unique 函数从数据集的 ID 列中获取唯一值列表。

import numpy as np

ids = np.unique(df['ID'])
print(ids)

这将输出唯一 ID 列的列表。

['A' 'B' 'C' 'D']

我们将使用 NumPy 创建一个新的数组,该数组每个 ID 值都有 n 个副本。

n = 3
result = np.repeat(ids, n)
print(result)

输出:

['A' 'A' 'A' 'B' 'B' 'B' 'C' 'C' 'C' 'D' 'D' 'D']

现在,我们将使用 repeat 函数重复数据集的值。

result_values = np.repeat(df['values'], n)
print(result_values)

输出:

[10 10 10 20 20 20 30 30 30 40 40 40 50 50 50 60 60 60 70 70 70 80 80 80 90 90 90]

这样,我们就可以使用 numpy.column_stack 函数将结果合并为单个数组。

final_array = np.column_stack((result, result_values))
print(final_array)

输出:

[['A' '10']
 ['A' '10']
 ['A' '10']
 ['B' '20']
 ['B' '20']
 ['B' '20']
 ['C' '30']
 ['C' '30']
 ['C' '30']
 ['D' '40']
 ['D' '40']
 ['D' '40']
 ['A' '50']
 ['A' '50']
 ['A' '50']
 ['B' '60']
 ['B' '60']
 ['B' '60']
 ['C' '70']
 ['C' '70']
 ['C' '70']
 ['D' '80']
 ['D' '80']
 ['D' '80']
 ['A' '90']
 ['A' '90']
 ['A' '90']]

现在我们已经成功地为每个 ID 创建了 n 行数据。

Pandas

现在,我们将在 Pandas 中执行相同的操作并创建一个新的数据框。

首先,我们需要导入 Pandas 库。

import pandas as pd

接下来,我们使用 Pandas 的 groupby 函数获取每个 ID 的数据框。

grouped = df.groupby('ID')

然后,我们将使用 Pandas 的 apply 函数来为每个 ID 创建 n 行。

n = 3
result = grouped.apply(lambda x: x.loc[x.index.repeat(n)]).reset_index(drop=True)

print(result)

这将输出新的数据框。

   ID  values
0   A      10
1   A      30
2   A      80
3   A      10
4   A      30
5   A      80
6   A      10
7   A      30
8   A      80
9   B      20
10  B      60
11  B      20
12  B      60
13  B      20
14  B      60
15  C      40
16  C      70
17  C      40
18  C      70
19  C      40
20  C      70
21  D      50
22  D      90
23  D      50
24  D      90
25  D      50
26  D      90

我们可以看到,现在我们已经使用 Pandas 成功地为每个 ID 创建了 3 行。

总结

在本文中,我们介绍了如何在 NumPy 和 Pandas 中针对每个唯一值(ID)创建 n 行。在机器学习任务中,这种数据预处理和转换可以非常有用。虽然 NumPy 和 Pandas 中都有不同的方法来执行此操作,但它们的输出都很相似。现在,您可以使用适合您的工具之一来处理您的数据集。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程