我是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().
任何帮助将不胜感激。
答案 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)