如何用 'One' 替换数据框中特定行的 'Zero'

How to replace 'Zero' by 'One' for particular row in data frame

我有这个dataframe: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'))

使用df.ilocdf.min:

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

使用 DataFrame.iloc 设置值 by min(有 select 按位置编辑,这意味着最后一个标签 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()

或者如果需要 select by 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  

能否请您尝试使用 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