使用 loc 无法正常更新 Pandas 数据框中的行

马杜尔·亚达夫

我有一个名为 output 的数据框 -

RAW_ENTITY_NAME   ENTITY_TYPE       ENTITY_NAME        IS_MAIN
01-03-2017        TNRMATDT          01 03 2017         1
04-02-2017        TNRSTRTDT         04 02 2017         1
documents         TNRTYPE           SIGHT              1
documents         TNRDOCSBY         NOT FOUND          1
accept            TNRDTL            accept             1 
23                TNRDAYS           23                 1

打印(df.dtypes())

RAW_ENTITY_NAME               object
ENTITY_TYPE                   object
ENTITY_NAME                   object
IS_MAIN                       object

注意 - ENTITY_TYPE = TNRTYPE, ENTITY_NAME = SIGHTANDIS_MAIN = 1只会在数据框中出现一次。

如果 ENTITY_TYPE 是 TNRTYPE,ENTITY_NAME = SIGHT AND IS_MAIN = 1,我想更新一些值。

temp = output.loc[(output['IS_MAIN'] == 1) & (output['ENTITY_TYPE'] == 'TNRTYPE'), 'ENTITY_NAME']
temp = temp.reset_index(drop=True)
temp = temp[0]
if (temp == 'SIGHT'):
   output.loc[(output['IS_MAIN'] == '1') & (output['ENTITY_TYPE'] == 'TNRDOCSBY'), 'ENTITY_NAME'] = 'PAYMENT'

   output.loc[(output['IS_MAIN'] == '1') & (output['ENTITY_TYPE'].isin(['TNRDTL'])),
                                   ['ENTITY_NAME', 'RAW_ENTITY_NAME']] = 'NOT APPLICABLE'

   output.loc[(output['IS_MAIN'] == '1') & (output['ENTITY_TYPE'].isin(['TNRDAYS'])),
                                   ['ENTITY_NAME']] = '0'

   output.loc[(output['IS_MAIN'] == '1') & (output['ENTITY_TYPE'].isin(['TNRDAYS'])),
                                   ['RAW_ENTITY_NAME']] = ''

   output.loc[(output['IS_MAIN'] == '1') & (output['ENTITY_TYPE']=='TNRSTRTDT'),
                                   ['ENTITY_NAME', 'RAW_ENTITY_NAME']] = ''

   output.loc[(output['IS_MAIN'] == '1') & (output['ENTITY_TYPE']=='TNRMATDT'),
                                   ['ENTITY_NAME', 'RAW_ENTITY_NAME']] = ''

最终输出是——

RAW_ENTITY_NAME   ENTITY_TYPE       ENTITY_NAME        IS_MAIN
    01-03-2017        TNRMATDT          01 03 2017         1
    04-02-2017        TNRSTRTDT         04 02 2017         1
    documents         TNRTYPE           SIGHT              1
    documents         TNRDOCSBY         PAYMENT            1
    NOT APPLICABLE    TNRDTL            NOT APPLICABLE     1 
                      TNRDAYS           0                  1

正如你所看到的,除了前两行,一切都在更新,即 ENTITY_TYPE = TNRMATDT AND TNRSTRTDAT。

我想知道为什么下面的代码没有给出想要的结果。

output.loc[(output['IS_MAIN'] == '1') & (output['ENTITY_TYPE']=='TNRSTRTDT'),
                                   ['ENTITY_NAME', 'RAW_ENTITY_NAME']] = ''

output.loc[(output['IS_MAIN'] == '1') & (output['ENTITY_TYPE']=='TNRMATDT'),
                                       ['ENTITY_NAME', 'RAW_ENTITY_NAME']] = ''

如果有人能找出我犯的错误或告诉我任何解决方法,我会很高兴。

多谢。

耶斯列

对我来说,你的解决方案工作得很好,我尝试重写它以获得更好的可读性并且不重复相同的条件:

temp = output.loc[(output['IS_MAIN'] == '1') & 
                  (output['ENTITY_TYPE'] == 'TNRTYPE'), 'ENTITY_NAME']

#if values in IS_MAIN are integers
#temp = output.loc[(output['IS_MAIN'] == 1) & 
#                  (output['ENTITY_TYPE'] == 'TNRTYPE'), 'ENTITY_NAME']

if (temp.iat[0] == 'SIGHT'):
#more general working if not match condition
#if (next(iter(temp), 'not match') == 'SIGHT'):

    m1 = output['IS_MAIN'] == '1'
    #if values in IS_MAIN are integers
    #m1 = output['IS_MAIN'] == 1
    m2 = output['ENTITY_TYPE'] == 'TNRDOCSBY'
    m3 = output['ENTITY_TYPE'] == 'TNRDTL'
    m4 = output['ENTITY_TYPE'] == 'TNRDAYS'
    m5 = output['ENTITY_TYPE'].isin(['TNRMATDT','TNRSTRTDT'])

    output.loc[m1 & m2, 'ENTITY_NAME'] = 'PAYMENT'

    output.loc[m1 & m3, ['ENTITY_NAME', 'RAW_ENTITY_NAME']] = 'NOT APPLICABLE'

    output.loc[m1 & m4, ['ENTITY_NAME']] = '0'
    output.loc[m1 & m4, ['RAW_ENTITY_NAME']] = ''

    output.loc[m1 & m5, ['ENTITY_NAME', 'RAW_ENTITY_NAME']] = ''

print (output)
  RAW_ENTITY_NAME ENTITY_TYPE     ENTITY_NAME IS_MAIN
0                    TNRMATDT                       1
1                   TNRSTRTDT                       1
2       documents     TNRTYPE           SIGHT       1
3       documents   TNRDOCSBY         PAYMENT       1
4  NOT APPLICABLE      TNRDTL  NOT APPLICABLE       1
5                     TNRDAYS               0       1

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用loc更新数据框python pandas

来自分类Dev

Pandas loc无法与数据透视表一起使用,页眉中有多余的行

来自分类Dev

在Pandas数据框.loc中使用Python的in操作符

来自分类Dev

使用正则表达式后,Pandas .loc无法正常工作?

来自分类Dev

在Hy中使用Pandas Loc

来自分类Dev

使用regex使用loc运算符从pandas中的列中删除行

来自分类Dev

使用loc在多标题数据框中插入列

来自分类Dev

是否可以在Pandas的loc中使用loc来替换值?

来自分类Dev

在Pandas中,.loc不返回指定的行

来自分类Dev

使用系列作为输入,如何在pandas数据框中找到具有匹配值的行?例如df.loc [series]?

来自分类Dev

使用Pandas中的列表删除数据框中的行

来自分类Dev

使用np.where或loc更新熊猫数据框的多列

来自分类常见问题

Python:Pandas系列-为什么使用loc?

来自分类Dev

使用 df(loc) Pandas 的多个条件

来自分类Dev

使用 iterrows 选择 Pandas 数据框中的下 N 行

来自分类Dev

如何使用loc在Pandas中使用多个索引将sum写入底行

来自分类Dev

方括号如何影响pandas.loc数据框查询

来自分类Dev

无法使用行索引从python数据框中获取行

来自分类Dev

python pandas loc返回空数据帧

来自分类Dev

在python的pandas中利用.loc的正确方法

来自分类Dev

使用UnbalancedDataset包对数据集进行过度采样时出现KeyError(在pandas.index.IndexEngine.get_loc中)

来自分类Dev

熊猫系列使用loc到数据框的行,但缺少某些列

来自分类Dev

熊猫系列使用loc到数据框的行,但缺少某些列

来自分类Dev

使用条件从另一个数据框中更新值来更新pandas数据框列

来自分类Dev

在Pandas / Python中使用可变大小的行更新数据框

来自分类Dev

使用另一个数据框的行中的多值在pandas数据框中查找值

来自分类Dev

将 SQL 查询的列表结果列表存储在 Pandas 数据框中,并使用数据框中的相应行

来自分类Dev

无法使用BeautifulSoup Webscrape HTML表并使用Python将其加载到Pandas数据框中

来自分类Dev

使用类似的行填充python pandas数据框中的缺失行

Related 相关文章

  1. 1

    使用loc更新数据框python pandas

  2. 2

    Pandas loc无法与数据透视表一起使用,页眉中有多余的行

  3. 3

    在Pandas数据框.loc中使用Python的in操作符

  4. 4

    使用正则表达式后,Pandas .loc无法正常工作?

  5. 5

    在Hy中使用Pandas Loc

  6. 6

    使用regex使用loc运算符从pandas中的列中删除行

  7. 7

    使用loc在多标题数据框中插入列

  8. 8

    是否可以在Pandas的loc中使用loc来替换值?

  9. 9

    在Pandas中,.loc不返回指定的行

  10. 10

    使用系列作为输入,如何在pandas数据框中找到具有匹配值的行?例如df.loc [series]?

  11. 11

    使用Pandas中的列表删除数据框中的行

  12. 12

    使用np.where或loc更新熊猫数据框的多列

  13. 13

    Python:Pandas系列-为什么使用loc?

  14. 14

    使用 df(loc) Pandas 的多个条件

  15. 15

    使用 iterrows 选择 Pandas 数据框中的下 N 行

  16. 16

    如何使用loc在Pandas中使用多个索引将sum写入底行

  17. 17

    方括号如何影响pandas.loc数据框查询

  18. 18

    无法使用行索引从python数据框中获取行

  19. 19

    python pandas loc返回空数据帧

  20. 20

    在python的pandas中利用.loc的正确方法

  21. 21

    使用UnbalancedDataset包对数据集进行过度采样时出现KeyError(在pandas.index.IndexEngine.get_loc中)

  22. 22

    熊猫系列使用loc到数据框的行,但缺少某些列

  23. 23

    熊猫系列使用loc到数据框的行,但缺少某些列

  24. 24

    使用条件从另一个数据框中更新值来更新pandas数据框列

  25. 25

    在Pandas / Python中使用可变大小的行更新数据框

  26. 26

    使用另一个数据框的行中的多值在pandas数据框中查找值

  27. 27

    将 SQL 查询的列表结果列表存储在 Pandas 数据框中,并使用数据框中的相应行

  28. 28

    无法使用BeautifulSoup Webscrape HTML表并使用Python将其加载到Pandas数据框中

  29. 29

    使用类似的行填充python pandas数据框中的缺失行

热门标签

归档