繁体   English   中英

根据标准 DataFrame 仅更改 1 个单元格的值

[英]Change value of only 1 cell based on criteria DataFrame

根据条件,我想更改某个列上第一行的值,到目前为止这是我所拥有的

despesas['recibos'] =''
for a in recibos['recibos']:
    if len(despesas.loc[(despesas['despesas']==a) & (despesas['recibos']==''), 'recibos'])>0:
        despesas.loc[(despesas['despesas']==a) & (despesas['recibos']==''), 
'recibos'].iloc[0] =a

因此,我只想通过 where (despesas['despesas']==a) & (despesas['recibos']=='')值更改列recibos的第一个值

编辑 1

例子:

despesas['despesas'] = [11.95,  2.5,  1.2 ,  0.6 ,  2.66,  2.66,  3.  , 47.5 , 16.95,17.56]
recibos['recibos'] = [11.95,  1.2 ,  1.2 ,  0.2 ,  2.66,  2.66,  3.  , 47.5 , 16.95, 17.56]

结果应该是:

[[11.95, 11.95],  [2.5, null] ,  [1.2, 1.2] ,  [0.6, null] ,  [2.66, 2.66],  [2.66, 2.66],  [3., 3] , [47.5, 45.5 ], [16.95, 16.95], [17.56, 17.56]]

它可能是有效的:

mapper = recibos['recibos'].map(despesas['despesas'].value_counts()).fillna(0)
despesas['recibos'] = recibos['recibos'].where(recibos.groupby('recibos')
                                                      .cumcount()
                                                      .lt(mapper),'null')
print(despesas)
   despesas recibos
0     11.95   11.95
1      2.50     1.2
2      1.20    null
3      0.60    null
4      2.66    2.66
5      2.66    2.66
6      3.00       3
7     47.50    47.5
8     16.95   16.95
9     17.56   17.56

我找到了我正在寻找的解决方案

from itertools import count, filterfalse

despesas['recibos'] =''
for index, a in despesas.iterrows():
    if len(recibos.loc[recibos['recibos']==a['despesas']])>0:
        despesas.iloc[index,1]=True
        recibos.drop(recibos.loc[recibos['recibos']==a['despesas']][:1].index, inplace=True)

暂无
暂无

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

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