фабрики и уникальные номера в датафрейме панд - PullRequest
2 голосов
/ 02 октября 2019

У меня есть фрейм данных, который выглядит следующим образом:

import pandas as pd
import random

d={'ID':["x1", "x2", "x1"],
'CUSIP':['a', 'b', "#NULL"],
'ISIN':["#NULL", "#NULL", 'I']}

df=pd.DataFrame(data=d)
df

Я пытаюсь заменить все символы #NULL суффиксом уникального номера. Итак, таблица вывода будет выглядеть примерно так:

import pandas as pd
import random

d={'ID':["x1", "x2", "x1"],
'CUSIP':['a', 'b', "#NULL_1"],
'ISIN':["#NULL_2", "#NULL_3", 'I']}

df=pd.DataFrame(data=d)
df

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

Создать Series и добавить новые значения отфильтрованных строк с помощью range, последнее изменение формы назад:

s = df.unstack()
m = s == '#NULL'
s.loc[m] = [f'#NULL_{x + 1}'  for x in range(m.sum())]

df = s.unstack().T
print (df)
   ID    CUSIP     ISIN
0  x1        a  #NULL_2
1  x2        b  #NULL_3
2  x1  #NULL_1        I
0 голосов
/ 02 октября 2019

Простым решением было бы перебрать все значения

count=1
for i in range(len(df)):
    for c in df.columns:
        if df.loc[i,c]=="#NULL":
            df.loc[i,c]="#NULL_"+str(count)
            count+=1
df

     CUSIP  ID     ISIN
0        a  x1  #NULL_1
1        b  x2  #NULL_2
2  #NULL_3  x1        I

Для получения другого заказа:

count=1
for c in df.columns:
    for i in range(len(df)):
        if df.loc[i,c]=="#NULL":
            df.loc[i,c]="#NULL_"+str(count)
            count+=1
df

     CUSIP  ID     ISIN
0        a  x1  #NULL_2
1        b  x2  #NULL_3
2  #NULL_1  x1        I
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...