繁体   English   中英

将唯一值从组存储到Pandas中的另一列

[英]Store unique values from group to another column in Pandas

我在将唯一值从一列获取到另一列作为值时遇到问题。

df我有:

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)

如果缺少值不是问题,请使用具有unique GroupBy.transform

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]

如果需要删除它们,解决方案是先删除它们,聚集uniquemap到新列:

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM