Сохранять уникальные значения из группы в другой столбец в Pandas - PullRequest
1 голос
/ 06 июня 2019

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

Если у меня есть:

id  value1 valueNo
1    12      140
1    13      149
1    11      149
2    11      nan
2    11      150
3    15      145
3    12      149

Желаемый результат будет

id  value1 valueNo   uniqueNo
1    12      140      140, 149
1    13      149      140, 149
1    11      149      140, 149
2    11      nan      150
2    11      150      150
3    15      145      145, 149
3    12      149      145, 149

Я пробовал несколько подходов, но у меня ничего не работает.

df['uniqueNo']=df.groupby(['id'])['valueNo'].apply(lambda x: x.unique())
d['uniqueNo'] = df.groupby(['id'])['valueNo'].apply(list)

1 Ответ

2 голосов
/ 06 июня 2019

Если пропущенные значения не являются проблемой, используйте GroupBy.transform с unique:

df['uniqueNo']=df.groupby(['id'])['valueNo'].transform('unique')
print (df)
   id  value1  valueNo        uniqueNo
0   1      12    140.0  [140.0, 149.0]
1   1      13    149.0  [140.0, 149.0]
2   1      11    149.0  [140.0, 149.0]
3   2      11      NaN    [nan, 150.0]
4   2      11    150.0    [nan, 150.0]
5   3      15    145.0  [145.0, 149.0]
6   3      12    149.0  [145.0, 149.0]

Если необходимо удалить их, сначала удалите их, объедините unique и map в новый столбец:

s = df.dropna(subset=['valueNo'])['valueNo'].astype(int).groupby(df['id']).unique()
#if converting to intgers is not necessary
#s = df.dropna(subset=['valueNo']).groupby('id')['valueNo'].unique()
df['uniqueNo'] = df['id'].map(s)
print (df)
   id  value1  valueNo    uniqueNo
0   1      12    140.0  [140, 149]
1   1      13    149.0  [140, 149]
2   1      11    149.0  [140, 149]
3   2      11      NaN       [150]
4   2      11    150.0       [150]
5   3      15    145.0  [145, 149]
6   3      12    149.0  [145, 149]
...