熊猫:如何正确设置布尔索引定义的值与布尔索引定义的另一个单元格的值?



我想使用布尔索引在我的数据帧中选择一个值,并用同样使用布尔索引选择的同一数据qframe中的另一个值填充它。

现在的问题当然是,我不能指望它们中的任何一个只返回一个值,即使我可以,语法也不能。

所以现在我必须做这样的事情:

import pandas as pd
import numpy as np
L1 = ['A','A','A','A','B','B','B','B']
L2 = ['a','b','c','d','a','b','c','d']
L3 = [1,2,3,4,5,6,7,8]
df = pd.DataFrame({"L1":L1,"L2":L2,"L3":L3})
filtered = df.loc[(df.L1 == 'B')&(df.L2 == 'c'),"L3"]
if not filtered.empty:
value = filtered.values[0]
else:
value = np.nan
df.loc[(df.L1 == 'A')&(df.L2 == 'c'),"L3"] = value

首先,我必须选择返回序列的目标值,然后必须确保至少有一个值在那里,然后我才能设置它。

如果我不确定只有一个值,我必须考虑返回多个值的情况以及如何处理这种情况。

有没有更短更优雅的方法可以做到这一点,基本上是一个函数,说"满足条件XYZ时填充值,满足条件ABC的值",可以提供处理多个值的函数,例如平均值或第一个?

我认为如果需要,您可以使用Series.item只过滤一个值,但不幸的是,如果其他值:

value = np.nan if filtered.empty else filtered.item()