如何在Pandas DataFrame满足多条件时向单元格添加列表
给Pandas DataFrame满足条件的单元格添加列表的解决办法
为什么你用loc会报错?
当你用df.loc给筛选出的行赋值列表时,Pandas会默认把这个列表当成要分配给多行的数据,要求列表长度和筛选出的行数一致。但你这里只需要给单个单元格塞列表,自然就触发了ValueError。
三种可行的解决方法
方法1:用at结合索引定位
先找到目标行的索引,再用at精准赋值:
# 获取符合条件的行的索引(假设参与者+会话是唯一组合) target_index = df[(df['参与者'] == 4) & (df['会话'] == 1)].index[0] # 给指定单元格赋值列表 df.at[target_index, 'C列'] = [1, 2, 3]
方法2:给loc的赋值套一层列表
把要存的列表放在另一个列表里,让Pandas把它识别成单个单元格的值,而不是多行数据:
df.loc[(df['参与者'] == 4) & (df['会话'] == 1), 'C列'] = [[1, 2, 3]]
这样外层列表的长度(1)和筛选出的行数(1)匹配,内层列表就会被当成单元格的内容存进去。
方法3:提前把列类型设为object(可选)
如果你的C列原本不是object类型,可能会有存储异常,提前转换一下更稳妥:
df['C列'] = df['C列'].astype(object)
不过前两种方法执行时,Pandas会自动把列转为object类型,所以这一步不是必须的。
验证效果
执行完上面任意一种方法后,你的DataFrame就会变成想要的样子:
| 参与者 | 会话 | C列 |
|---|---|---|
| 1 | 1 | |
| 2 | 1 | |
| 3 | 1 | |
| 3 | 2 | |
| 4 | 1 | [1, 2, 3] |
| 4 | 2 |
内容的提问来源于stack exchange,提问作者Tuur
相关产品推荐
相关产品推荐

