我有一个Pandas数据框,看起来像这样...
| 索引|我的列(_C)|
| - -|- -|
| 第0页||
| 一个||
| 2个||
| 三个||
| 四个||
| 五个||
| 六个||
我需要做的是根据索引有条件地为'my_column'赋值。前三行的值应为'dog'、'cat'、'bird'。然后,接下来的三行也应为'dog'、'cat'、'bird'。该模式应一直应用到数据集的结尾。
| 索引|我的列(_C)|
| - -|- -|
| 第0页|挡块|
| 一个|猫|
| 2个|鸟|
| 三个|挡块|
| 四个|猫|
| 五个|鸟|
| 六个|挡块|
我已经尝试了以下代码无效。
for index, row in df.iterrows():
counter=3
my_column='dog'
if counter>3
break
else
counter+=1
my_column='cat'
counter+=1
if counter>3
break
else
counter+=1
my_column='bird'
if counter>3
break
3条答案
按热度按时间5vf7fwbs1#
创建词典:
您可以使用.name和modulus(%)函数乘以3来取得索引值,以取得您想要的结果:
thtygnil2#
几个问题:
1.您正在
break
退出循环,提前终止循环,而不是使用if
,elif
,else
结构1.您尝试在迭代 Dataframe 时更新 Dataframe 。
请参阅this question,了解为什么在迭代时不应该更新。
相反,您可以
utugiqy63#
高级索引
一种解决方案是将dog-cat-bird转换为
pd.Series
并使用高级索引:首先从
df.index % len(dcb)
创建一个索引数组:然后,通过使用高级索引,您可以使用该索引数组从
dcb
中选择元素:最后,注意上面数组的索引重复,重置它,用
.reset_index(drop=True)
删除旧索引,最后赋值给 Dataframe 。使用发电机
下面是一个使用无限dog-cat-bird生成器的替代解决方案: