使用Pandas1.42
拥有一个包含5列的DataFrame:A、B、C、D、E
如果C列的值为真,我需要将D列和E列的值赋给A列和B列,我希望使用.loc
方法在一行中完成此操作。
示例
| A类|B|C级|D级|E级|
| - ------|- ------|- ------|- ------|- ------|
| 1个|四个|真的|七|十个|
| 第二章|五个|假|八个|十一|
| 三个|六个|真的|九|十二|
预期结果
| A类|B|C级|D级|E级|
| - ------|- ------|- ------|- ------|- ------|
| 七|十个|真的|七|十个|
| 第二章|五个|假|八个|十一|
| 九|十二|真的|九|十二|
df = pd.DataFrame(
{'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [True, False, True],
'D': [7, 8, 9],
'E': [10, 11, 12]}
)
df.loc[df['C'], ['A', 'B']] = df[['D', 'E']]
实际结果
| A类|B|C级|D级|E级|
| - ------|- ------|- ------|- ------|- ------|
| 楠|楠|真的|七|十个|
| 第二章|五个|假|八个|十一|
| 楠|楠|真的|九|十二|
解决方案我想
df.loc[df['C'], ['A', 'B']] = (df.D[df.C], df.E[df.C])
看起来如果Pandas是以DataFrame的形式出现的话,它们就不能正确地被赋值,但是如果你把它很好地打包成Series的元组,它就能正确地赋值。我是语法错误还是Pandas中的一个bug?
1条答案
按热度按时间jqjz2hbq1#
在两端使用布尔索引,并通过转换
to_numpy
数组来删除索引对齐:或者使用
set_axis
更改列名:输出: