我正在尝试使用 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)
| 归档时间: |
|
| 查看次数: |
5760 次 |
| 最近记录: |