Как сопоставить значения столбца, где совпадают два других? «Переиндексация действительна только для объектов индекса с уникальным значением»? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть один DataFrame, df, у меня есть четыре столбца, показанных ниже:

IDP1    IDP1Number    IDP2    IDP2Number
1       100           1       NaN
3       110           2       150
5       120           3       NaN
7       140           4       160
9       150           5       190
NaN     NaN           6       130
NaN     NaN           7       NaN
NaN     NaN           8       200
NaN     NaN           9       90
NaN     NaN           10      NaN

Вместо этого я хочу отобразить значения из df.IDP1Number в IDP2Number, используя IDP1 в ​​IDP2. Я хочу заменить существующие значения, если IDP1 и IDP2 существуют с IDP1Number. В противном случае оставьте значения в IDP2Number в покое.

The error message that appears reads, " Reindexing only valid with uniquely value Index objects

Ниже приводится датафрейм:

IDP1    IDP1Number    IDP2    IDP2Number
1       100           1       100
3       110           2       150
5       120           3       110
7       140           4       160
9       150           5       120
NaN     NaN           6       130
NaN     NaN           7       140
NaN     NaN           8       200
NaN     NaN           9       150
NaN     NaN           10      NaN

1 Ответ

2 голосов
/ 24 февраля 2020

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

# filter the data and create a mapping dict
maps = df.query("IDP1.notna()")[['IDP1', 'IDP1Number']].set_index('IDP1')['IDP1Number'].to_dict()

# create new column using ifelse condition
df['IDP2Number'] = df.apply(lambda x: maps.get(x['IDP2'], None) if (pd.isna(x['IDP2Number']) or x['IDP2'] in maps) else x['IDP2Number'], axis=1)

print(df)

   IDP1  IDP1Number  IDP2  IDP2Number
0   1.0       100.0     1       100.0
1   3.0       110.0     2       150.0
2   5.0       120.0     3       110.0
3   7.0       140.0     4       160.0
4   9.0       150.0     5       120.0
5   NaN         NaN     6       130.0
6   NaN         NaN     7       140.0
7   NaN         NaN     8       200.0
8   NaN         NaN     9       150.0
9   NaN         NaN    10         NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...