Pandas:如何正确设置boolean index定义的值与来自boolean index定义的另一个单元格的值?

时间:2017-07-05 06:52:13

标签: python pandas

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

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

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

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满足条件"可以提供处理多个值的函数,例如是先还是先?

1 个答案:

答案 0 :(得分:1)

我认为你可以使用Series.item,如果需要只过滤一个值,但是如果不理想的话,那就很不自然:

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