繁体   English   中英

在 python 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 逻辑如下:

  • 有一个条件来区分 Col1 是否等于 SF 的情况
  • 如果 Col1等于 SF 那么我会为 Col3 groupby并且我会聚合 Col4 的项目
  • 如果 Col1 等于 SF 那么我会为 Col2 和 Col3 分组,我会聚合Col4的项目

我的问题在哪里? 我不知道我是否想多了,但是使用groupby pandas 减少了 dataframe 的行数。我的目标只是添加一列,就像我上面显示的那样。

先感谢您!!!

GroupBy.transformnumpy.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.

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