例如,我有一个数据框架:
cond value1 value2
0 True 1 1
1 False 3 5
2 True 34 2
3 True 23 23
4 False 4 2
我希望在cond=True
时将value 1替换为value 2*2
。所以我想要的结果是:
cond value1 value2
0 True 2 1
1 False 3 5
2 True 4 2
3 True 46 23
4 False 4 2
我可以通过以下代码实现它:
def convert(x):
if x.cond:
x.value1= x.value2*2
return x
data = data.apply(lambda x: convert(x),axis=1)
我认为数据量大的时候速度太慢了。我通过<code>来尝试它。loc,但我不知道如何设置值。
我如何通过<code>实现它。loc或其他简单方法?提前谢谢。
使用 np.,其中
:
df['value1'] = np.where(df.cond,df.value2*2,df.value1)
print(df)
cond value1 value2
0 True 2 1
1 False 3 5
2 True 4 2
3 True 46 23
4 False 4 2
您可以使用< code > where /< code > mask :
df.value1 = df.value1.mask(df.cond, df.value2*2)
# Or,
# df.value1 = df.value1.where(~df.cond, df.value2*2)
print(df)
cond value1 value2
0 True 2 1
1 False 3 5
2 True 4 2
3 True 46 23
4 False 4 2
创建布尔掩码和多个仅过滤的行:
mask = df.cond
df.loc[mask, 'value1'] = df.loc[mask, 'value2'] * 2
print (df)
cond value1 value2
0 True 2 1
1 False 3 5
2 True 4 2
3 True 46 23
4 False 4 2
对使用. locs进行索引/切片的赋值有一个一般性问题。 假设以下数据帧df: 要复制的代码: 我创建df1使用: 然后,我根据B中的值,使用以下公式为C赋值: 作业正常工作,但我收到一个SettingBackCopy警告。是我做错了什么,还是这是预期的功能?我认为使用. loc可以避免链式赋值。是不是我错过了什么?我正在使用熊猫14.1
所以我运行了一些示例: 类似于: 让我们使用和并确保得到相同的内容 这就是说,谁能提供关于方法可以做什么和不能做什么的指导呢?
假设我有下面的数据框,我想将
最近开始从我的安全地带(R)扩展到Python,我对中的单元格定位/选择感到有点困惑。我已经阅读了文档,但我很难理解各种本地化/选择选项的实际含义。 我是否有理由使用或而不是,以及,反之亦然?在什么情况下我应该使用哪种方法? 注意:以后的读者要知道,这个问题已经过时了,是在熊猫v0.20之前写的,当时有一个函数叫做。这个方法后来被分成两个-和-以明确区分位置索引和基于标签的索引。请注意,由于不一致
问题内容: 在中创建 其他列中 最快的列的最快(最有效)方法 是 什么? 考虑以下示例: 产生: 假设我想创建一个新列,该列包含一个值,该值基于使用函数将当前行中的单词与中的其他行进行比较的输出而得出。 这的确产生了正确的输出,但是它使用了and ,这对于large而言并不是很有效。 有没有一种方法可以 矢量化 (正确的术语?)这种方法?还是有另一种更好(更快)的方法来做到这一点? 在原始帖子中,
问题内容: 我这样制作数据框。 我想通过使用一些熊猫方法将索引转换为此(例如set_index,stack 、、) 我怎样才能做到这一点? 问题答案: 我认为你需要与重塑,然后交换在水平由列由去年的排序列: 用另一种解决方案和: