pandas:如果在循环中遇到条件,则更新值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas:如果在循环中遇到条件,则更新值相关的知识,希望对你有一定的参考价值。

如果满足条件,我必须更新数据框列。但是有多个条件和多个值要更新。因此我想循环进行。

数据框如下:

mode  car1  car2  bus1  bus2
car1   10    20    5     2
car2   11    22    3     1
bus1   4     4     2     2  
bus2   3     4     3     5

我意识到数据结构有点奇怪,但让我们继续这样做。如果mode为car1,我希望新列值具有car1列中的值。等等。

我的代码是这样的:

targets = ['car1', 'car2', 'bus1', 'bus2']
for target in targets:
    df.loc[(df.mode==f'target'),'value']=df.[target]

这可以工作,但每次都会替换NaN不满足条件的行。因此,我最终只得到包含bus2行中bus2值但在所有其他行中包含NaNs的新值列。

在Stata,我会写:

gen value = .
foreach x in car1 car2 bus1 bus2 {
replace value = `x' if mode=="`x'"
}

在Python中寻找类似的代码!

答案

pandaslookup

df['newvalue']=df.set_index('mode').lookup(df['mode'],df['mode'])
df
Out[184]: 
   mode  car1  car2  bus1  bus2  newcol  newvalue
0  car1    10    20     5     2      10        10
1  car2    11    22     3     1      22        22
2  bus1     4     4     2     2       2         2
3  bus2     3     4     3     5       5         5
另一答案

这应该工作:

df['newcol'] = 0
for key, item in df.iterrows():
    df['newcol'].iloc[key] = item[item['mode']]

以上是关于pandas:如果在循环中遇到条件,则更新值的主要内容,如果未能解决你的问题,请参考以下文章

((Python)pandas.DataFrame不在每个for循环周期中更新值,为什么?

Pandas Pivot Table:按条件过滤时出错

Pandas HTML 输出条件格式 - 如果值在范围内,则突出显示单元格

在 for 循环中显示 Pandas 数据框

如果条件满足,则递减数组并打印一个值

while循环