如何用pandas的.loc将列表值赋值给DataFrame指定列单元格
解决方案
你可以通过以下步骤实现需求:
- 定位
B列值为1的起始索引 - 从该索引开始,选取连续N个行(N为
list_values的长度) - 给这些行的新列
D赋值,其余行保留NaN
具体代码如下:
import pandas as pd data = {'A': [1, 2, 3, 4, 5, 6], 'B':[1, 0, 0, 0, 0, 0]} df = pd.DataFrame(data) list_values = ['A', 'B', 'C'] # 获取B=1的起始索引(取第一个匹配项) start_idx = df[df['B'] == 1].index[0] # 计算需要赋值的索引范围 end_idx = start_idx + len(list_values) # 初始化D列为空值 df['D'] = pd.NA # 给目标索引范围赋值 df.loc[start_idx:end_idx-1, 'D'] = list_values print(df)
运行后输出结果:
A B D 0 1 1 A 1 2 0 B 2 3 0 C 3 4 0 <NA> 4 5 0 <NA> 5 6 0 <NA>
原代码报错原因
你之前的代码中,start_index = df[df['B'] == 1].index得到的是仅包含索引0的单个索引对象,但list_values有3个元素,赋值时两边长度不匹配,因此抛出ValueError。
内容的提问来源于stack exchange,提问作者user3046211
相关产品推荐
相关产品推荐

