Python:如果数据框中的多个列具有一个特定字符串以外的任何值,则设置新的列值

瓦伦西亚21

第一次发布新手编码人员提出的问题,欢迎提出建议和改进。

我试图在数据框中创建一个新列。每行的新列应根据以下内容进行填充:

1)如果该行中的所有选择列均包含值“无”,则为“未知”。

2)非“无”值,如果其中一列包含该值。

在我使用的数据集中,每行只有一个非“无”值,并且列名与单元格值相同。

我知道我可以遍历每一行以在那些列中找到一个非'None'值,如果找到,则将该列值设置为该值(否则设置为'Unknown'),但是我感觉缺少一些简单的方法使这项工作。

我已经考虑过使用.loc / .iloc / .at和其他一些方法来选择值,但是我觉得自己不会接近。

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['None', 'None', 'None', 'None'],
                   'B': ['None', 'B', 'None', 'None'],
                   'C': ['None', 'None', 'C', 'None'],
                   'D': ['None', 'None', 'None', 'D']})

values = ['B', 'C', 'D']

#In the code below, replace the string  'This should be non-None value (B, C or D)' with an expression
df['Letter'] = pd.np.where(df[values].eq(values).any(1, skipna=True), 
                           'This should be non-None value (B, C or D)', 'Unknown')
print(df)

   A     B     C     D     Letter
0  None  None  None  None  Unknown                                  
1  None  B     None  None  This should be non-None value (B, C or D)
2  None  None  C     None  This should be non-None value (B, C or D)
3  None  None  None  D     This should be non-None value (B, C or D)
耶斯列尔

我相信需要:

df['Letter'] = df.ne('None').dot(df.columns).replace('', 'Unknown')
#if None are not strings
#df['Letter'] = df.notna().dot(df.columns).replace('', 'Unknown')
#oldier pandas versions
#df['Letter'] = df.notnull().dot(df.columns).replace('', 'Unknown')
print(df)
      A     B     C     D   Letter
0  None  None  None  None  Unknown
1  None     B  None  None        B
2  None  None     C  None        C
3  None  None  None     D        D

说明

None通过DataFrame.ne!=)或比较得到值的布尔掩码DataFrame.notna

print(df.ne('None'))
       A      B      C      D
0  False  False  False  False
1  False   True  False  False
2  False  False   True  False
3  False  False  False   True

然后DataFrame.dot与列名一起使用

print(df.ne('None').dot(df.columns))
0     
1    B
2    C
3    D
dtype: object

最后将缺失值替换为Series.replace

print(df.ne('None').dot(df.columns).replace('', 'Unknown'))
0    Unknown
1          B
2          C
3          D
dtype: object

另一个解决方案:

df['Letter'] = df.replace('None', np.nan).ffill(axis=1).iloc[:, -1].fillna('Unknown')
print(df)
      A     B     C     D   Letter
0  None  None  None  None  Unknown
1  None     B  None  None        B
2  None  None     C  None        C
3  None  None  None     D        D

说明

必要时将第一个replace字符串添加None为缺失值:

print (df.replace('None', np.nan))
    A    B    C    D
0 NaN  NaN  NaN  NaN
1 NaN    B  NaN  NaN
2 NaN  NaN    C  NaN
3 NaN  NaN  NaN    D

转发填充缺失值:

print (df.replace('None', np.nan).ffill(axis=1))
     A    B    C    D
0  NaN  NaN  NaN  NaN
1  NaN    B    B    B
2  NaN  NaN    C    C
3  NaN  NaN  NaN    D

通过位置按位置选择最后一列DataFrame.iloc

print (df.replace('None', np.nan).ffill(axis=1).iloc[:, -1])
0    NaN
1      B
2      C
3      D
Name: D, dtype: object

最后将缺失值替换为Series.fillna

print (df.replace('None', np.nan).ffill(axis=1).iloc[:, -1].fillna('Unknown'))
0    Unknown
1          B
2          C
3          D
Name: D, dtype: object

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据 R 中数据框中所有其他列中的字符串值,使用 dplyr 创建一个新列

如果所有值都是特定字符串,则删除pandas数据框中的列

Python:在数据框中,创建一个新列,并使用从另一列的值中切出的字符串

在python中,如何从任何列中存在特定字符串的数据框中获取行(字符串值)

如果列在Pandas中包含任何字符串值,则从数据框中删除值

如果字符向量中的任何字符串值位于数据框的列中,则返回在新列中匹配的字符串

将具有特定单词的字符串值传输到数据框 pandas,python 中的其他列

如果列值(字符串)包含python集合中的任何值,如何过滤数据框行?

Python如何在pandas数据帧的[]括号内提取指定的字符串,并创建一个具有布尔值的新列

如果列值具有多个值,则在数据框中创建新记录

如何在 Python 数据框中添加具有字典字符串值的列

如何用一个公共字符串值替换Pandas数据框列中的多个不同字符串?

Pandas:如果字符串存在于几列中的任何一列中,我想对计数求和,并将此计数添加到具有搜索词的另一个数据框中

从数据帧中删除行如果任何行值是在另一个数据帧,与具有多个列dataframes

Pandas:使用规则将数据框中 2 列的字符串值合并到一个新列中

从具有多个值的行中随机选择1个值;用清除的数据创建一个新列

一次将具有不同字符串值的新列追加到不同的数据框吗?

将具有多个值的pandas数据框列字符串拆分为单独的行

具有最后一个字符串值的新列,带有 R 符号

从pandas数据框中的一个或多个字符串值中列出

如何在特定列中添加具有相同字符串值的行而不转换数据框?

Python pandas 数据框:在数组列中,如果第一个项目包含特定字符串,则从数组中删除该项目

如果两列中的任何一个具有指定值,则过滤行

以列名中的字符串为条件,变异一个新列并从现有列粘贴值

在新列中创建具有唯一值的同一数据框的多个副本

如果另一个系列包含特定字符串,如何在返回值的数据框中创建一个系列?

如果一列在数据框中具有多个值,则创建多行

根据数据框中的列设置一个月数据的特定值

我有一个包含100多个列的表,某些列具有要更改为数字值的字符串值