gpt4 book ai didi

python - 如何在多级数据帧上正确使用 .loc?

转载 作者:行者123 更新时间:2023-12-01 03:30:36 27 4
gpt4 key购买 nike

给定 df 'AB':

A = pd.DataFrame([[1, 5, 2], [2, 4, 4], [3, 3, 1], [4, 2, 2], [5, 1, 4]],
columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5])
B = pd.DataFrame([[3, 3, 3], [2, 2, 2], [4, 4, 4], [5, 5, 5], [6, 6, 6]],
columns=['A', 'B', 'C'], index=[1, 2, 3, 4, 5])

A.columns = pd.MultiIndex.from_product([['A'], A.columns])
B.columns = pd.MultiIndex.from_product([['B'], B.columns])
AB = pd.concat([A, B], axis = 1)

我想根据列 ['B', 'C'] 的条件将列 'new' 添加到级别 'B'。我希望专门使用 df.loc,如下所示:

AB['B', 'new'] = 0
AB.loc[AB['B', 'C'] >= 3, 'new'] = 1

问题在于此过程创建了一个"new"df,而不是填充列 ['B', 'new']。

所需的输出是:

    A           B   
A B C A B C new
1 1 5 2 3 3 3 1
2 2 4 4 2 2 2 0
3 3 3 1 4 4 4 1
4 4 2 2 5 5 5 1
5 5 1 4 6 6 6 1

最佳答案

使用元组引用多级索引/列:

AB[('B', 'new')] = 0
AB.loc[AB[('B', 'C')] >= 3, ('B', 'new')] = 1

或者,在一行中:

AB[('B', 'new')] = AB[('B', 'C')].ge(3).astype(int)

结果输出:

   A        B          
A B C A B C new
1 1 5 2 3 3 3 1
2 2 4 4 2 2 2 0
3 3 3 1 4 4 4 1
4 4 2 2 5 5 5 1
5 5 1 4 6 6 6 1

关于python - 如何在多级数据帧上正确使用 .loc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com