Python中列表理解的多个条件

如何解决Python中列表理解的多个条件

我想基于索引中的值创建一列:

如果索引以字母值而不是'I0'开头,则返回“ P”,否则返回“ C”。

尝试:

df['new_col'] = ['P' if (x[0].isalpha() and not x[0].startswith("I0"))  else 'C' for x in df.index]

但是对于以'I0'开头的行,它返回了'P':


         A           B           C       new_col
Index           
I00001  1.325337    4.692308    1.615385    P
I00002  1.614780    3.615385    0.769231    P
I00003  1.141453    5.461538    2.000000    P
I00004  0.918300    8.538462    2.769231    P
I00005  1.189606    11.846154   2.692308    P
I00006  0.941459    7.153846    2.153846    P
I00007  0.466383    12.153846   9.384615    P
I00008  0.308627    198.692308  23.461538   P
I00011  0.537142    23.384615   6.846154    P
I00012  1.217390    11.923077   1.230769    P
I00013  1.052840    3.384615    2.000000    P
...

可复制的示例:

df = pd.DataFrame({'A': {'I00001': 1.3253365856660808,'I00002': 1.6147800817881086,'I00003': 1.1414534979918203,'I00004': 0.9183004454646491,'I00005': 1.1896061362142527,'I00006': 0.941459102789141,'I00007': 0.46638312473267185,'I00008': 0.3086270976042302,'I00011': 0.5371419441302684,'I00012': 1.2173904641254587,'I00013': 1.052839529263679,'I00014': 1.3587324409735149,'I00015': 3.464101615137755,'I00016': 1.1989578808281798,'I00018': 0.2433560755649686,'I00019': 0.5510000980337852,'I00020': 3.464101615137755,'I00022': 1.0454523047666737,'I00023': 1.3850513878332371,'I00024': 1.3314720972390754},'B': {'I00001': 4.6923076923076925,'I00002': 3.6153846153846154,'I00003': 5.461538461538462,'I00004': 8.538461538461538,'I00005': 11.846153846153847,'I00006': 7.153846153846154,'I00007': 12.153846153846153,'I00008': 198.69230769230768,'I00011': 23.384615384615383,'I00012': 11.923076923076923,'I00013': 3.3846153846153846,'I00014': 1.0,'I00015': 0.07692307692307693,'I00016': 0.6153846153846154,'I00018': 481.7692307692308,'I00019': 7.3076923076923075,'I00020': 0.07692307692307693,'I00022': 1.6153846153846154,'I00023': 0.5384615384615384,'I00024': 12.538461538461538},'C': {'I00001': 1.6153846153846154,'I00002': 0.7692307692307693,'I00003': 2.0,'I00004': 2.769230769230769,'I00005': 2.6923076923076925,'I00006': 2.1538461538461537,'I00007': 9.384615384615385,'I00008': 23.46153846153846,'I00011': 6.846153846153846,'I00012': 1.2307692307692308,'I00013': 2.0,'I00014': 0.38461538461538464,'I00016': 0.46153846153846156,'I00018': 79.07692307692308,'I00019': 3.6923076923076925,'I00022': 1.1538461538461537,'I00023': 0.46153846153846156,'I00024': 2.3076923076923075}}
)

解决方法

使用numpy.where的非循环解决方案:

df['new_col'] = np.where(df.index.str[0].str.isalpha() &
                         ~df.index.str.startswith("I0"),'P','C')

您的解决方案-从x[0]中删除x[0].startswith("I0")-如果不是I0,则测试第一个值,始终为True

df['new_col'] = ['P' if (x[0].isalpha() and not x.startswith("I0"))   
                     else 'C' for x in df.index]

测试

df = pd.DataFrame({'A': {'AA00001': 1.3253365856660808,'I00002': 1.6147800817881086,'IR0003': 1.1414534979918203,'00004': 0.9183004454646491,'**00005': 1.1896061362142527,'I00007': 0.46638312473267185}}
)

df['new_col'] = np.where(df.index.str[0].str.isalpha() &
                         ~df.index.str.startswith("I0"),'C')

df['new_col1'] = ['P' if (x[0].isalpha() and not x.startswith("I0"))   
                      else 'C' for x in df.index]
print (df)
                A new_col new_col1
**00005  1.189606       C        C
00004    0.918300       C        C
AA00001  1.325337       P        P
I00002   1.614780       C        C
I00007   0.466383       C        C
IR0003   1.141453       P        P
,

您正在检查代码中的x_counts= [] for item in df['x']: item_count = len(df[df['x']==item]) x_counts.append(item_count) df['x_count'] = x_counts ,这是错误的 改用此方法(检查x[0].startswith("I0")

x.startswith("I0")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?