我是一个超级初学者,所以请耐心等待。我觉得这应该很容易,但我无法弄清楚。我不确定是否应该创建两个列表,然后将它们组合起来,或者是否有办法以这种方式直接创建 DataFrame。
我需要一列包含这些值: df = pd.DataFrame({'x1':np.linspace(-2.47, 2.69, num=101)})
然后我将值 A、B、C、D 作为字符串。它可能是一个列表:
x2_values = [A, B, C, D]
或者也许不一定是?
我想最终得到一个 404 行的 DataFrame,其中对于 x2 的每个值,x1 的 101 个值重复 4 次。
所以像
x1 x2 1A 2A 3A 1乙 2乙 3乙 1℃ 2℃ 3C 1D 二维 3 D
我尝试使用 .concat 但无法工作。我还尝试用 for 循环填充 DataFrame,但无法让它没有错误。
我能够使用我在此处找到的列表理解来完成此操作作为参考:
dfB_x1 = [np.linspace(dfB.x1.min(), dfB.x1.max(), num=101)]
dfB_x2 = dfB.x2.unique().tolist()
dfB_viz = pd.DataFrame([(i,j) for i in dfB_x1 for j in dfB_x2],
columns=['x1', 'x2'])
但最终得到了这个:
x1 x2
0 [-2.479836790901536, -2.428101497642494, -2.37... C
1 [-2.479836790901536, -2.428101497642494, -2.37... D
2 [-2.479836790901536, -2.428101497642494, -2.37... A
3 [-2.479836790901536, -2.428101497642494, -2.37... B
并且不得不使用.explode
我只是觉得应该有一个更简单的方法。我已经学会了迭代这样的元组或如何使用 .explode
当然可以帮助!可以使用
itertools.cycle
和
zip
在 Python 中创建的 Pandas DataFrame。以下是如何操作:
import pandas as pd
import numpy as np
from itertools import cycle
# 创建 x1 值
x1 = np.linspace(-2.47, 2.69, num=101)
# 创建 x2 值
x2_values = ['A', 'B', 'C', 'D']
# 使用 itertools.cycle 创建 x2 值的循环迭代器
x2 = cycle(x2_values)
# 使用 zip 创建 (x1, x2) 值对的列表
data = [(a, b) for (a, b) in zip(x1, x2)]
# 创建 DataFrame
df = pd.DataFrame(data, columns=['x1', 'x2'])
# 打印 DataFrame
print(df)
此代码首先使用
np.linspace
创建一个包含 101 个值的 NumPy 数组
x1
。然后,它使用字符串创建一个列表
x2_values
。
此代码的关键是使用
itertools.cycle
函数,它创建一个迭代器,该迭代器无限期地循环遍历
x2_values
列表。这确保了即使
x1
比
x2_values
长,
x2
也会为
x1
中的每个值分配一个值。
然后,
zip
函数将
x1
和
x2
组合在一起,创建 (x1, x2) 对的迭代器。此迭代器用于使用
DataFrame
构造函数创建一个新的 Pandas DataFrame。
此方法创建了一个包含两列(
x1
和
x2
)的 DataFrame,其中
x2
值针对
x1
的每个值重复。这正是想要实现的目标。
希望这有帮助!如果有任何其他 Python 或 Pandas 问题,请告诉我。
标签:python,dataframe,merge,concatenation From: 78790971