带有嵌入式if语句的For循环,用于更新数据帧

时间:2018-09-28 10:50:32

标签: python pandas numpy dataframe

我是python的新手。我想使用嵌入的“ if”语句在数据框的元素上实现“ For”循环。

代码:

import numpy as np
import pandas as pd

#Dataframes
x = pd.DataFrame([1,-2,3])
y = pd.DataFrame()

for i in x.iterrows():
    for j in x.iteritems():
        if x>0:
            y = x*2
        else:
            y = 0

在上一个循环中,我想遍历x数据框中的每个项目,并根据“ if”语句中的条件生成一个新的数据框y。运行代码时,出现以下错误消息。

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

在熊猫中,如果存在矢量化解决方案,最好避免循环:

x = pd.DataFrame([1,-2,3], columns=['a'])

y = pd.DataFrame(np.where(x['a'] > 0, x['a'] * 2, 0), columns=['b'])
print (y)
   b
0  2
1  0
2  6

说明

首先按值比较布尔值掩码的列:

print (x['a'] > 0)
0     True
1    False
2     True
Name: a, dtype: bool

然后使用numpy.where根据条件设置值:

print (np.where(x['a'] > 0, x['a'] * 2, 0))
[2 0 6]

最后使用DataFrame构造函数或创建新列:

x['new'] = np.where(x['a'] > 0, x['a'] * 2, 0)
print (x)
   a  new
0  1    2
1 -2    0
2  3    6

答案 1 :(得分:0)

您可以尝试以下方法:

y = (x[(x > 0)]*2).fillna(0)