Замените значения столбца в соответствии с соответствующими значениями другого столбца в Pandas - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь заменить значение столбца на основе столбца.например, col1 имеет значения в первых 5 строках, а col2 имеет значения, поэтому обновите значения col1 в соответствии с col2.

Для следующих пяти строк нет значения в col1, но значение col2 имеет значение, просто пропустите эти строки, не нужно обновлять col1 и т. Д.

df9["col1"].replace(["s1"], "data_value", inplace=True)

я использовал эту строку кода из Замена нескольких значений в столбце данных pandas другим значением .Это дает мне вывод, просто замените значение значением данных, а не замените его значениями в столбце значений данных.

Кадр данных

    col1    col2    col3    col4
0   s1        NaN    NaN     NaN
1   s1        NaN    NaN     NaN
2   s1        NaN    NaN     NaN
3   s1       NaN    NaN     NaN
4   s1       NaN    NaN     NaN
5   NaN       s2    NaN     NaN
6   NaN       s2     NaN     NaN
7   NaN       s2    NaN     NaN
8   NaN       s2    NaN     NaN
9   NaN       s2    NaN     NaN
10  NaN      NaN    ss1     NaN
11  NaN      NaN    ss1     NaN
12  NaN      NaN    ss1     NaN
13  NaN      NaN    ss1     NaN
14  NaN      NaN    ss1     NaN
15  NaN      NaN    NaN     ss333
16  NaN      NaN    NaN     ss333
17  NaN      NaN    NaN     ss333
18  NaN      NaN    NaN     ss333
19  NaN      NaN    NaN     ss333

Требуемый вывод:

    col1    col2    col3    col4
0   0        NaN    NaN     NaN
1   0        NaN    NaN     NaN
2   0        NaN    NaN     NaN
3   0        NaN    NaN     NaN
4   0        NaN    NaN     NaN
5   NaN       0     NaN     NaN
6   NaN       0     NaN     NaN
7   NaN       0     NaN     NaN
8   NaN       0     NaN     NaN
9   NaN       0     NaN     NaN
10  NaN      NaN    500     NaN
11  NaN      NaN    500     NaN
12  NaN      NaN    500     NaN
13  NaN      NaN    500     NaN
14  NaN      NaN    500     NaN
15  NaN      NaN    NaN     500
16  NaN      NaN    NaN     500
17  NaN      NaN    NaN     500
18  NaN      NaN    NaN     500
19  NaN      NaN    NaN     500

Ответы [ 2 ]

0 голосов
/ 04 января 2019

В качестве альтернативы вы также можете использовать , где

df = pd.DataFrame({'col1': ['s1']*5+[np.nan]*15,
                  'col2':[np.nan]*5+['s2']*5+[np.nan]*10,
                  'col3':[np.nan]*10+['ss1']*5+[np.nan]*5,
                  'col4':[np.nan]*15+['ss333']*5,
                  'data_value':[0]*10+[500]*10 })

df = df.where(df.isnull(), df.pop('data_value'), axis = 0)

    col1    col2    col3    col4
0   0        NaN    NaN     NaN
1   0        NaN    NaN     NaN
2   0        NaN    NaN     NaN
3   0        NaN    NaN     NaN
4   0        NaN    NaN     NaN
5   NaN       0     NaN     NaN
6   NaN       0     NaN     NaN
7   NaN       0     NaN     NaN
8   NaN       0     NaN     NaN
9   NaN       0     NaN     NaN
10  NaN      NaN    500     NaN
11  NaN      NaN    500     NaN
12  NaN      NaN    500     NaN
13  NaN      NaN    500     NaN
14  NaN      NaN    500     NaN
15  NaN      NaN    NaN     500
16  NaN      NaN    NaN     500
17  NaN      NaN    NaN     500
18  NaN      NaN    NaN     500
19  NaN      NaN    NaN     500
0 голосов
/ 04 января 2019

Используйте mask для замены всех не пропущенных значений на pop для столбца извлечения Data:

df = pd.DataFrame({
         'A':[4,5] + [np.nan] * 4,
         'B':[np.nan,np.nan,9,4,np.nan,np.nan],
         'C':[np.nan] * 4 + [7,0],
         'Data':list('aaabbb')
})

print (df)
     A    B    C Data
0  4.0  NaN  NaN    a
1  5.0  NaN  NaN    a
2  NaN  9.0  NaN    a
3  NaN  4.0  NaN    b
4  NaN  NaN  7.0    b
5  NaN  NaN  0.0    b

df = df.mask(df.notnull(), df.pop('Data'), axis=0)
print (df)
     A    B    C
0    a  NaN  NaN
1    a  NaN  NaN
2  NaN    a  NaN
3  NaN    b  NaN
4  NaN  NaN    b
5  NaN  NaN    b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...