【问题标题】:How to replace 'Zero' by 'One' for particular row in data frame如何将数据框中特定行的“零”替换为“一”
【发布时间】:2021-07-07 05:37:59
【问题描述】:

我有这个数据框:df1

                    DP1       DP2       DP3      DP4      DP5      DP6    DP7     DP8  DP9  DP10
OP1             43239.0   46962.0   55858.0   9128.0  30372.0   5932.0  667.0   663.0  0.0   NaN
OP2               146.0      73.0   16647.0   5596.0   1493.0   7175.0   45.0   438.0  NaN   NaN
OP3            266279.0    1189.0       1.0  10939.0  17799.0   4702.0  235.0     NaN  NaN   NaN
OP4            360547.0   56943.0  142271.0  38217.0   1141.0   6757.0    NaN     NaN  NaN   NaN
OP5            380497.0   17946.0   19376.0      0.0   3974.0      NaN    NaN     NaN  NaN   NaN
OP6              6151.0   16525.0   17046.0  11532.0      NaN      NaN    NaN     NaN  NaN   NaN
OP7            142026.0   21999.0     820.0      NaN      NaN      NaN    NaN     NaN  NaN   NaN
OP8             76860.0  102580.0       NaN      NaN      NaN      NaN    NaN     NaN  NaN   NaN
OP9              6210.0       NaN       NaN      NaN      NaN      NaN    NaN     NaN  NaN   NaN
OP10                NaN       NaN       NaN      NaN      NaN      NaN    NaN     NaN  NaN   NaN
Total         1281955.0  264217.0  252019.0  75412.0  54779.0  24566.0  947.0  1101.0  0.0   0.0
Variance       160244.0   37745.0   42003.0  15082.0  13695.0   89.0  474.0  1101.0  NaN  -0.0
Mack's Sigma      400.0     194.0     205.0    123.0    117.0     90.0   22.0    33.0  NaN  -0.0 
Variance       160244.0   37745.0   42003.0  15082.0  13695.0   89.0  474.0  1101.0  NaN  -0.0

我想找出方差行最后两个条目的最小值。 我想最后两个条目并找到最小值,就像最后两个条目是 474.0 和 1101.0 一样,应该在 Nan 地方添加。

输出看起来像

Variance       160244.0   37745.0   42003.0  15082.0  13695.0   89.0  474.0  1101.0  474.0 -0.0

我试过这段代码:

minValuesObj = min(df1.loc('Variance'))

【问题讨论】:

    标签: python pandas dataframe numpy minimum


    【解决方案1】:

    您能否尝试使用loc 和离散元素概念。

    import pandas as pd
    df.loc['Variance','DP9'] = df.loc['Variance', ['DP7','DP8']].min()
    df
    

    输出如下:

                        DP1       DP2       DP3      DP4      DP5      DP6    DP7     DP8    DP9  DP10
    OP1             43239.0   46962.0   55858.0   9128.0  30372.0   5932.0  667.0   663.0    0.0   NaN
    OP2               146.0      73.0   16647.0   5596.0   1493.0   7175.0   45.0   438.0    NaN   NaN
    OP3            266279.0    1189.0       1.0  10939.0  17799.0   4702.0  235.0     NaN    NaN   NaN
    OP4            360547.0   56943.0  142271.0  38217.0   1141.0   6757.0    NaN     NaN    NaN   NaN
    OP5            380497.0   17946.0   19376.0      0.0   3974.0      NaN    NaN     NaN    NaN   NaN
    OP6              6151.0   16525.0   17046.0  11532.0      NaN      NaN    NaN     NaN    NaN   NaN
    OP7            142026.0   21999.0     820.0      NaN      NaN      NaN    NaN     NaN    NaN   NaN
    OP8             76860.0  102580.0       NaN      NaN      NaN      NaN    NaN     NaN    NaN   NaN
    OP9              6210.0       NaN       NaN      NaN      NaN      NaN    NaN     NaN    NaN   NaN
    OP10                NaN       NaN       NaN      NaN      NaN      NaN    NaN     NaN    NaN   NaN
    Total         1281955.0  264217.0  252019.0  75412.0  54779.0  24566.0  947.0  1101.0    0.0   0.0
    Variance       160244.0   37745.0   42003.0  15082.0  13695.0     89.0  474.0  1101.0  474.0  -0.0
    Mack's Sigma      400.0     194.0     205.0    123.0    117.0     90.0   22.0    33.0    NaN  -0.0
    

    【讨论】:

    • 很好,但是如果我们有不同的列,那么它将无法工作,我们不能只指定列名。不管怎样,谢谢你的时间:)
    • @MichaelScofield,只需更改列名,顺便说一下,在 iloc 中,如果您更改列(位置)也会发生同样的事情,即使这样也会失败 :) 欢呼,学习愉快。
    【解决方案2】:

    使用df.ilocdf.min

    df1.iloc[-2, -2] = df1.iloc[-2, -4:-2].min()
    

    【讨论】:

    • @jezrael 更新了我的答案。现在它的工作。
    • 您的第一个解决方案是使用loc。我在你之前发布了iloc
    • 是的,这是df1.iloc['Variance', -2:].min() - 不幸的是错了。
    • 是的,就像你解决了你的解决方案一样,我也解决了。
    • 如果我删除我的解决方案,你会高兴吗?
    【解决方案3】:

    使用 DataFrame.iloc 设置值按 min (这里是按位置选择的,这意味着上一个标签 Variance 使用 -2):

    df1.iloc[-2, -2] = df1.iloc[-2, -4:-2].min()
    

    或者可以使用Index.get_loc 按标签名称定位:

    pos = df1.index.get_loc('Variance')
    df1.iloc[pos, -2] = df1.iloc[pos, -4:-2].min()
    

    或者如果需要通过Variance 选择,请使用DataFrame.loc 按标签搜索,对于动态列名,请使用索引df1.columns

    df1.loc['Variance', df1.columns[-2]] = df1.loc['Variance', df1.columns[-4:-2]].min()
    

                        DP1       DP2       DP3      DP4      DP5      DP6    DP7  \
    OP1             43239.0   46962.0   55858.0   9128.0  30372.0   5932.0  667.0   
    OP2               146.0      73.0   16647.0   5596.0   1493.0   7175.0   45.0   
    OP3            266279.0    1189.0       1.0  10939.0  17799.0   4702.0  235.0   
    OP4            360547.0   56943.0  142271.0  38217.0   1141.0   6757.0    NaN   
    OP5            380497.0   17946.0   19376.0      0.0   3974.0      NaN    NaN   
    OP6              6151.0   16525.0   17046.0  11532.0      NaN      NaN    NaN   
    OP7            142026.0   21999.0     820.0      NaN      NaN      NaN    NaN   
    OP8             76860.0  102580.0       NaN      NaN      NaN      NaN    NaN   
    OP9              6210.0       NaN       NaN      NaN      NaN      NaN    NaN   
    OP10                NaN       NaN       NaN      NaN      NaN      NaN    NaN   
    Total         1281955.0  264217.0  252019.0  75412.0  54779.0  24566.0  947.0   
    Variance       160244.0   37745.0   42003.0  15082.0  13695.0     89.0  474.0   
    Mack's Sigma      400.0     194.0     205.0    123.0    117.0     90.0   22.0   
    
                     DP8    DP9  DP10  
    OP1            663.0    0.0   NaN  
    OP2            438.0    NaN   NaN  
    OP3              NaN    NaN   NaN  
    OP4              NaN    NaN   NaN  
    OP5              NaN    NaN   NaN  
    OP6              NaN    NaN   NaN  
    OP7              NaN    NaN   NaN  
    OP8              NaN    NaN   NaN  
    OP9              NaN    NaN   NaN  
    OP10             NaN    NaN   NaN  
    Total         1101.0    0.0   0.0  
    Variance      1101.0  474.0  -0.0  
    Mack's Sigma    33.0    NaN  -0.0  
    

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多