(Python) Создать новый столбец на основе значений существующего столбца - PullRequest
2 голосов
/ 27 января 2020

У меня есть набор данных 116 строк и 43 столбцов. Я хотел бы создать новый столбец из существующего столбца в моем наборе данных Python.

Этот столбец будет модификацией столбца «Местоположение», который уже существует в моих данных. Есть 7 уникальных локаций, и я хочу объединить 3 локации, исходя из условия, что они появляются <4 раза в моем наборе данных. </p>

Допустим, у нас есть локации: A, B, C, D, E, F и G. Места имеют следующее количество вхождений в моем наборе данных.

Location     NumRows
A            41
B            30
C            28
D            8
E            3
F            3
G            2

В соответствии с тем, что я описал выше, я хотел бы, чтобы в новом столбце (Местоположение 2) имелось следующее число строк:

Location     NumRows
A            41
B            30
C            28
D            8
Other        8

Может кто-нибудь помочь мне с синтаксисом в создании этого нового столбца? Любая помощь будет оценена!

Ответы [ 3 ]

2 голосов
/ 27 января 2020

Если у вас есть столбец местоположений:

print(df)                                                               
   ID Location
0   1        A
1   2        B
2   3        A
3   4        C
4   5        E
5   6        F
6   7        G
7   8        D
8   9        D
9  10        B

Вы можете использовать Series.isin:

df['NewLocation'] = df['Location']
df.loc[df['NewLocation'].isin(['E','F','G']), 'NewLocation'] = 'Other'

print(df)                                                              
   ID Location NewLocation
0   1        A           A
1   2        B           B
2   3        A           A
3   4        C           C
4   5        E       Other
5   6        F       Other
6   7        G       Other
7   8        D           D
8   9        D           D
9  10        B           B
1 голос
/ 27 января 2020

Вот способ сделать:

locs = ['E','F','G']

# calculate value
v = df.query("Location in @locs")['NumRows'].sum()

# create a new row
r = pd.Series(['Other', v], index=['Location','NumRows'])

# append the new row in data
df = df.query("Location not in @locs").append(r, ignore_index=True)

  Location  NumRows
0        A       41
1        B       30
2        C       28
3        D        8
4    Other        8
0 голосов
/ 27 января 2020

Вы можете объединить .groupby() и np.where():

df = df.groupby(
        np.where(df['Location'].isin(['E', 'F', 'G']), 'Other', df.Location)
    ).sum().reset_index().rename(columns={'index':'Location'})

  Location  NumRows
0        A       41
1        B       30
2        C       28
3        D        8
4    Other        8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...