我尝试过与其他问题不同的方法,但似乎仍无法找到问题的正确答案.关键的一点是,如果这个人被算作西班牙裔,他们就不能算作别的了.即使他们在另一个种族栏目中有"1",他们仍被视为西班牙裔,而不是两个或更多种族.同样,如果所有ERI列的总和大于1,则它们被计为两个或更多种族,不能被视为独特的种族(接受西班牙裔).希望这是有道理的.任何帮助将不胜感激.
它几乎就像在每行中执行for循环一样,如果每条记录符合条件,它们将被添加到一个列表中并从原始列表中删除.
从下面的数据框中,我需要根据以下内容计算新列:
========================= CRITERIA ======================== =======
IF [ERI_Hispanic] = 1 THEN RETURN “Hispanic”
ELSE IF SUM([ERI_AmerInd_AKNatv] + [ERI_Asian] + [ERI_Black_Afr.Amer] + [ERI_HI_PacIsl] + [ERI_White]) > 1 THEN RETURN “Two or More”
ELSE IF [ERI_AmerInd_AKNatv] = 1 THEN RETURN “A/I AK Native”
ELSE IF [ERI_Asian] = 1 THEN RETURN “Asian”
ELSE IF [ERI_Black_Afr.Amer] = 1 THEN RETURN “Black/AA”
ELSE IF [ERI_HI_PacIsl] = 1 THEN RETURN “Haw/Pac Isl.”
ELSE IF [ERI_White] = 1 THEN RETURN “White”
Run Code Online (Sandbox Code Playgroud)
评论:如果西班牙裔美国人的ERI标志为真(1),那么员工被归类为"西班牙裔"
评论:如果超过1个非西班牙语ERI标志为真,则返回"两个或更多"
====================== DATAFRAME =========================== …
我在Pandas中使用布尔索引.问题是为什么声明:
a[(a['some_column']==some_number) & (a['some_other_column']==some_other_number)]
Run Code Online (Sandbox Code Playgroud)
工作正常,而
a[(a['some_column']==some_number) and (a['some_other_column']==some_other_number)]
Run Code Online (Sandbox Code Playgroud)
存在错误?
例:
a=pd.DataFrame({'x':[1,1],'y':[10,20]})
In: a[(a['x']==1)&(a['y']==10)]
Out: x y
0 1 10
In: a[(a['x']==1) and (a['y']==10)]
Out: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud) 我想用另一列的值填充一列中的缺失值.
我读到循环遍历每一行将是非常糟糕的练习,并且最好一次性完成所有操作,但我无法找到如何使用该fillna方法.
数据之前
Day Cat1 Cat2
1 cat mouse
2 dog elephant
3 cat giraf
4 NaN ant
Run Code Online (Sandbox Code Playgroud)
数据之后
Day Cat1 Cat2
1 cat mouse
2 dog elephant
3 cat giraf
4 ant ant
Run Code Online (Sandbox Code Playgroud) 当日期列的值在日期列表中时,我想从pandas数据帧中删除行.以下代码不起作用:
a=['2015-01-01' , '2015-02-01']
df=df[df.datecolumn not in a]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ValueError:Series的真值是不明确的.使用a.empty,a.bool(),a.item(),a.any()或a.all().
我有一个DataFrame df:
A B
a 2 2
b 3 1
c 1 3
Run Code Online (Sandbox Code Playgroud)
我想根据以下标准创建一个新列:
如果排 A == B: 0
如果排A > B: 1
如果排 A < B: -1
所以鉴于上表,它应该是:
A B C
a 2 2 0
b 3 1 1
c 1 3 -1
Run Code Online (Sandbox Code Playgroud)
对于if else我这样做的典型情况np.where(df.A > df.B, 1, -1),pandas是否提供了一个特殊的语法来一步解决我的问题(无需创建3个新列然后组合结果)?
我试图找到一个数组中大于a但小于b的所有元素的索引.这可能只是我的语法问题,但这不起作用:
numpy.where((my_array > a) and (my_array < b))
Run Code Online (Sandbox Code Playgroud)
我该怎么解决这个问题?或者有更好的方法吗?
谢谢!
如何将条件逻辑应用于Pandas DataFrame.
请参见下面显示的DataFrame,
data desired_output
0 1 False
1 2 False
2 3 True
3 4 True
Run Code Online (Sandbox Code Playgroud)
我的原始数据显示在"数据"列中,而next_output显示在其旁边.如果'data'中的数字低于2.5,则desired_output为False.
我可以应用一个循环并重新构建DataFrame ......但这将是'非pythonic'
如果我有一个带有列x的数据帧df,并希望在伪代码中使用此值基于x的值创建列y
if df['x'] <-2 then df['y'] = 1
else if df['x'] > 2 then df['y']= -1
else df['y'] = 0
Run Code Online (Sandbox Code Playgroud)
我将如何实现这一目标.我认为np.where是最好的方法,但不知道如何正确编码.
我有一个像这样的pandas数据框:
portion used
0 1 1.0
1 2 0.3
2 3 0.0
3 4 0.8
Run Code Online (Sandbox Code Playgroud)
我想基于used列创建一个新列,所以df看起来像这样:
portion used alert
0 1 1.0 Full
1 2 0.3 Partial
2 3 0.0 Empty
3 4 0.8 Partial
Run Code Online (Sandbox Code Playgroud)
alert基于创建新列used是1.0,alert应该是Full.used是0.0,alert应该是Empty.alert应该是Partial.最好的方法是什么?
我可以通过定义用户函数然后使用apply在Panda中添加一个新列.但是,我想用lambda做到这一点; 有办法吗?
例如,df有两列a和b.我想创建一个新列c,它等于a和之间的最长长度b.
就像是:
df['c'] = df.apply(lambda x, len(df['a']) if len(df['a']) > len(df['b']) or len(df['b']) )
Run Code Online (Sandbox Code Playgroud)
一种方法:
df = pd.DataFrame({'a':['dfg','f','fff','fgrf','fghj'], 'b' : ['sd','dfg','edr','df','fghjky']})
df['c'] = df.apply(lambda x: max([len(x) for x in [df['a'], df['b']]]))
print df
a b c
0 dfg sd NaN
1 f dfg NaN
2 fff edr NaN
3 fgrf df NaN
4 fghj fghjky NaN
Run Code Online (Sandbox Code Playgroud)