![](/img/trans.png)
[英]Create a new column based on Grouping of similar values in another column in pandas
[英]Create a new column with unique values from another in python Pandas - without grouping
我已经发布了一个问题,但我提出的问题很糟糕。 这是我的问题:
我有一个这样的 dataframe:
列1 | 列2 | 列3 | 列4 | 所需列 |
---|---|---|---|---|
顺丰 | 123 | 01/02 | 向上 | 上,西澳 |
高炉 | 543 | 30/12 | 做 | 溶解氧,自动对焦 |
QW | 241 | 30/12 | 自动对焦 | 溶解氧,自动对焦 |
顺丰 | 123 | 01/02 | 西澳大利亚州 | 上,西澳 |
QW | 789 | 20/11 | 丁 | 丁 |
顺丰 | 678 | 31/12 | 加时赛 | 加时赛 |
我希望获得DESIRED COLUMN 。 逻辑如下:
我的问题在哪里? 我不知道我是否想多了,但是使用groupby pandas 减少了 dataframe 的行数。我的目标只是添加一列,就像我上面显示的那样。
先感谢您!!!
将GroupBy.transform
与numpy.where
一起使用:
m = df.Col1.eq('SF')
s1 = df.groupby(['Col2','Col3'])['Col4'].transform(', '.join)
s2 = df.groupby(['Col3'])['Col4'].transform(', '.join)
df['DESIRED COLUMN'] = np.where(m, s1, s2)
print (df)
Col1 Col2 Col3 Col4 DESIRED COLUMN
0 SF 123 01/02 UP UP, WA
1 BF 543 30/12 DO DO, AF
2 QW 241 30/12 AF DO, AF
3 SF 123 01/02 WA UP, WA
4 QW 789 20/11 D D
5 SF 678 31/12 OT OT
如果NaN
s in Col2, Col3
可能的解决方案:
m = df.Col1.eq('SF')
df1 = df.fillna({'Col2':'nan', 'Col3':'nan'})
s1 = df1.groupby(['Col2','Col3'])['Col4'].transform(', '.join)
s2 = df1.groupby(['Col3'])['Col4'].transform(', '.join)
df['DESIRED COLUMN'] = np.where(m, s1, s2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.