【问题标题】:how to write a for loop with if elif and delete statement in python?如何在python中使用if elif和delete语句编写for循环?
【发布时间】:2020-07-15 23:59:18
【问题描述】:

我有一个包含 5000 条记录的数据框。

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

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

一月的A

2 月的 B

三月的C等等..

条件:

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

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

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

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

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

应删除任何匹配不正确的记录(应删除数据框中的整行) 数据中的示例应删除第 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

【问题讨论】:

标签: python pandas python-2.7 dataframe


【解决方案1】:

我们需要先创建条件数据框然后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

【讨论】:

    【解决方案2】:

    这在 python 中使用 ord 函数来过滤掉与 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2020-12-06
      • 2016-02-16
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      相关资源
      最近更新 更多