繁体   English   中英

如何在 python 中使用 if elif 和 delete 语句编写 for 循环?

[英]how to write a for loop with if elif and delete statement in python?

我有一个带有 5000 条记录的 dataframe。

Data:
        Month   Heat Number  wts   gcs 
         1        HA        8.2    98
         1        HB        7.6    86
         2        HB        4.2    76
         3        HC        6.9    46
         4        HD        7.4    36
         5        HD        9.8    26
         6        HF        10.8   16

热号栏的第二个字母表示月份。

一月

B 代表二月

C 三月等..

健康)状况:

如果月份列中的记录为 1,则热号列中的对应值应始终为“HA”

如果月份为 2,则热号列中的对应值应始终为 'HB'

如果月份为 3,则热量数列中的对应值应始终为“HC”

如果月份为 4,则热量数列中的对应值应始终为“HD”

如果月份为 5,则热量数列中的对应值应始终为“HE”

任何匹配不正确的记录都应删除(应删除 dataframe 中的整行)示例数据中的第 2 行应删除,因为月份为 1 且热编号为 HB(热编号应为 HA)

Desired Output:

Month   Heat Number  wts   gcs 
 1        HA        8.2    98
 2        HB        4.2    76
 3        HC        6.9    46
 4        HD        7.4    36
 6        HF        10.8   16

我们需要先创建条件 dataframe 然后merge

df=df.merge(pd.DataFrame({'Month': [1,2,3,4,5,6],'Heat Number':['HA','HB','HC','HD','HE','HF']}),how='inner')
   Month Heat Number   wts  gcs
0      1         HA   8.2   98
1      2         HB   4.2   76
2      3         HC   6.9   46
3      4         HD   7.4   36
4      6         HF  10.8   16

这使用python中的 ORD function 过滤掉与 Month 列不匹配的行:

(
    df.assign(temp=lambda x: [ord(word[-1]) - 64 for word in x["Heat Number"]])
    .query("Month == temp")
    .drop("temp", axis=1)
)

    Month   Heat Number wts gcs
0   1       HA          8.2 98
2   2       HB          4.2 76
3   3       HC          6.9 46
4   4       HD          7.4 36
6   6       HF         10.8 16

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM