Skip to main content
 首页 » 编程设计

python之如何创建具有重复值的列 pandas(不匹配的索引)

2025年05月04日14wuhuacong

我正在尝试使用 pandas 在我的数据框中添加一个包含一些值的新列,并让它重复相同的值,直到它到达索引的末尾:

我试过:

df['水果类型']=['香蕉','橙子','草莓']

它说:

ValueError:值的长度与索引的长度不匹配

**我的索引大约有 8000 行长,所以索引和新列值的数量不匹配

我希望该列看起来像:

水果类型: 香蕉 橘子 草莓 香蕉 橘子 草莓 香蕉 橘子 草莓

一段时间后我找到了解决方案:

df.insert(0, '水果类型', ['香蕉', '橙子','草莓']*int(((len(df))/3)))

0 代表列号,后跟列名,然后是列值。 *int... 将索引除以 3 并重复该数量的值。 感谢@acai 最后的乘数

请您参考如下方法:

方法一:

假设您的数据框有 10 个元素长(并且您想重复包含 3 个水果的列表)。

>>> df 
  column_a 
0        a 
1        b 
2        c 
3        d 
4        f 
5        e 
6        x 
7        s 
8        n 
9        i 

使用 itertools.cycle,您可以将您的列表变成一个迭代器并循环遍历它直到数据帧结束:

from itertools import cycle 
 
fruits = cycle(['Bananas','Oranges','Strawberries']) 
df['Fruit_Type'] = [next(fruits) for fruit in range(len(df))] 
 
>>> df 
  column_a    Fruit_Type 
0        a       Bananas 
1        b       Oranges 
2        c  Strawberries 
3        d       Bananas 
4        f       Oranges 
5        e  Strawberries 
6        x       Bananas 
7        s       Oranges 
8        n  Strawberries 
9        i       Bananas 

方法二

这是一个丑陋的 hack,您可以将其用作替代方法:

您可以使用 pandas.np.tile(它是 numpy.tile 的包装器)重复您的列表,但需要多次(使用 // 运算符),然后只需将列表添加到填充数据帧所需的第 n 个元素:

fruits = ['Bananas','Oranges','Strawberries'] 
 
df['Fruit Type']= pd.np.tile(fruits, len(df) // len(fruits)).tolist() + fruits[:len(df)%len(fruits)] 
 
>>> df 
  column_a    Fruit Type 
0        a       Bananas 
1        b       Oranges 
2        c  Strawberries 
3        d       Bananas 
4        f       Oranges 
5        e  Strawberries 
6        x       Bananas 
7        s       Oranges 
8        n  Strawberries 
9        i       Bananas