Как установить одно значение с помощью условия where - PullRequest
1 голос
/ 29 мая 2020

У меня есть такой фрейм данных (df)

   key            name value
0    0          master     0
1    1           basic     0
2    2           clear     0
3    3            debu     0

Я хочу сделать вот так:

items = [master,master,basic,clear]

for i in items:   # loop the items
    df[where('name==@i')].value += 1     # increment each item

Окончательный результат должен быть

   key            name value
0    0          master     2
1    1           basic     1
2    2           clear     1
3    3            debu     0

Как я могу получить одно значение и увеличить ???

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Другой способ сделать это, но не с такими вариантами, как @ jezrael

items = ['master','master','basic','clear']
l={i:items.count(i) for i in items}
df['value']=df['name'].map(l).fillna(0).astype(int)
df


key name    value
0   0   master  2
1   1   basic   1
2   2   clear   1
3   3   debu    0
1 голос
/ 29 мая 2020

Я предпочитаю использовать Series.map с Counter, тогда l oop не требуется:

from collections import Counter

items = ['master','master','basic','clear']

df['value'] = df['name'].map(Counter(items))
print (df)
   key    name  value
0    0  master      2
1    1   basic      1
2    2   clear      1
3    3    debu      0

Но это возможно, как указано в комментариях, фильтруйте boolean indexing с DataFrame.loc, на мой взгляд, назначить с += не проблема в pandas, используйте его бесплатно:

items = ['master','master','basic','clear']

for i in items:   # loop the items
    df.loc[df['name']==i, 'value'] += 1    

print (df)
   key    name  value
0    0  master      2
1    1   basic      1
2    2   clear      1
3    3    debu      0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...