相关疑难解决方法(0)

pandas根据其他列的值创建新列

我尝试过与其他问题不同的方法,但似乎仍无法找到问题的正确答案.关键的一点是,如果这个人被算作西班牙裔,他们就不能算作别的了.即使他们在另一个种族栏目中有"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 =========================== …

python numpy apply pandas

251
推荐指数
7
解决办法
37万
查看次数

Pandas中布尔索引的逻辑运算符

我在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)

python filtering boolean dataframe pandas

119
推荐指数
3
解决办法
14万
查看次数

熊猫 - FillNa与另一栏

我想用另一列的值填充一列中的缺失值.

我读到循环遍历每一行将是非常糟糕的练习,并且最好一次性完成所有操作,但我无法找到如何使用该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)

python pandas fillna

70
推荐指数
4
解决办法
5万
查看次数

根据"不在"条件从数据框中删除行

当日期列的值在日期列表中时,我想从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().

python pandas

62
推荐指数
2
解决办法
7万
查看次数

根据if-elif-else条件创建新列

我有一个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个新列然后组合结果)?

python conditional pandas

57
推荐指数
5
解决办法
10万
查看次数

如何使用numpy.where与逻辑运算符

我试图找到一个数组中大于a但小于b的所有元素的索引.这可能只是我的语法问题,但这不起作用:

numpy.where((my_array > a) and (my_array < b))
Run Code Online (Sandbox Code Playgroud)

我该怎么解决这个问题?或者有更好的方法吗?

谢谢!

python numpy where logical-operators

41
推荐指数
1
解决办法
5万
查看次数

Pandas DataFrame上的条件逻辑

如何将条件逻辑应用于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'

python pandas

27
推荐指数
4
解决办法
10万
查看次数

在pandas数据帧中向量化条件赋值

如果我有一个带有列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是最好的方法,但不知道如何正确编码.

python numpy vectorization pandas

22
推荐指数
3
解决办法
2万
查看次数

使用条件在pandas dataframe中生成新列

我有一个像这样的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基于创建新列
  • 如果used1.0,alert应该是Full.
  • 如果used0.0,alert应该是Empty.
  • 否则,alert应该是Partial.

最好的方法是什么?

python conditional calculated-columns pandas

16
推荐指数
4
解决办法
5万
查看次数

通过在两个现有列上使用lambda函数在Panda中创建新列

我可以通过定义用户函数然后使用apply在Panda中添加一个新列.但是,我想用lambda做到这一点; 有办法吗?

例如,df有两列ab.我想创建一个新列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)

python lambda calculated-columns multiple-columns pandas

16
推荐指数
1
解决办法
3万
查看次数