如何创建具有重复值熊猫的列(不匹配的索引)

Das*_*ual 5 python pandas

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

我试过了:

df['Fruit Type']=['Bananas','Oranges','Strawberries']

它说:

ValueError: length of values does not match length of index

**我的索引大约有 8000 行,因此索引与新列值的数量不匹配

我希望该列看起来像:

Fruit Type: Bananas Oranges Strawberries Bananas Oranges Strawberries Bananas Oranges Strawberries

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

df.insert(0, 'Fruit Type', ['Bananas', 'Oranges','Strawberries']*int(((len(df))/3)))

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

sac*_*cuL 10

方法一:

假设您的数据框有 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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

方法二

这是一个丑陋的黑客,您可以将其用作替代方案:

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

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
Run Code Online (Sandbox Code Playgroud)