基于其他列的值创建新列的更好方法

Dsh M

什么是创建下面提到的同一列的更好方法:

col_new = []
for r1 in df['col_A']:
    if r1==1:
        for r2 in df['col_B']:
            if r2!='None':
                col_new.append('col_new')

df['col_new'] = col_new

我的数据帧很大(120k * 22),运行上面的代码使笔记本挂起。有没有一种更快,更有效的方法来创建此列,该列表示col_A为1时col_B的所有非空值。

耶斯列尔

我相信需要创建布尔掩码,然后通过附加值DataFrame.loc

mask = (df['col_A'] == 1) & (df['col_B']!='None')

#if None is not string
#mask = (df['col_A'] == 1) & (df['col_B'].notnull())
df.loc[mask, 'col_new'] = 'col_new'

样品

在列中是字符串Nones:

df = pd.DataFrame({
    'col_A': [1,1,2,1],
    'col_B': ['a','None','None','a']
})
print (df)
   col_A col_B
0      1     a
1      1  None
2      2  None
3      1     a

mask = (df['col_A'] == 1) & (df['col_B']!='None')
df.loc[mask, 'col_new'] = 'val'
print (df)
   col_A col_B col_new
0      1     a     val
1      1  None     NaN
2      2  None     NaN
3      1     a     val

在列中不是字符串Nones,然后使用Series.notna

df = pd.DataFrame({
    'col_A': [1,1,2,1],
    'col_B': ['a',None,None,'a']
})
print (df)
   col_A col_B
0      1     a
1      1  None
2      2  None
3      1     a

mask = (df['col_A'] == 1) & (df['col_B'].notna())
#oldier pandas versions
#mask = (df['col_A'] == 1) & (df['col_B'].notnull())
df.loc[mask, 'col_new'] = 'val'
print (df)
   col_A col_B col_new
0      1     a     val
1      1  None     NaN
2      2  None     NaN
3      1     a     val

另外,如果要使用if-else语句numpy.where真的很有帮助:

df['col_new'] = np.where(mask, 'val', 'another_val')
print (df)
   col_A col_B      col_new
0      1     a          val
1      1  None  another_val
2      2  None  another_val
3      1     a          val

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建一个基于数据框中其他列的值创建新列的函数

如何基于与其他列中的值匹配的行中的值创建新列?

如何基于Pandas DataFrame中其他列的值创建新列

如何基于其他两列的分组总和来创建新的值列?

如何基于方程式和其他列的唯一值创建新列?

如何基于其他列的值在data.table中创建新列

熊猫,基于多行中的其他列创建新列

基于调整其他列的权重来创建新列

数据框基于其他列创建新列

Julia DataFrames:基于其他列创建数组的新列

基于其他列在 Sql Server 中创建新列

创建基于其他列递增的新列

基于主键从其他列中的数据创建新列

熊猫:基于其他列创建新列的有效方法。多对少

基于行中的列值以及df中其他行中的列值创建新列?

使用对多个列应用功能,基于其他列的值将新列创建到数据框

Python Pandas:基于组内的最大值创建新列,但使用其他(字符串)列中的值

熊猫:如何创建基于其他列值的条件对其他列求和的列?

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

从其他列创建新的特定值列

熊猫根据其他列的值创建新的列ID

根据其他列中的NA值创建新列

Pandas:根据其他列的文本值创建新列

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

在 R 中,如何根据其他列的值从其他列的列标题创建新列

基于其他列的新列

如何基于列值创建其他行或数据框

基于其他列条件和其他列计算的数据框新列值

Python-添加新列并考虑其他列值以创建新列的值