在 python Pandas 中创建一个具有唯一值的新列 - 不分组
Create a new column with unique values from another in python Pandas - without grouping
我已经发布了一个问题,但我提出的问题很糟糕。
这是我的问题:
我有一个这样的数据框:
Col1
Col2
Col3
Col4
DESIRED COLUMN
SF
123
01/02
UP
UP, WA
BF
543
30/12
DO
DO, AF
QW
241
30/12
AF
DO, AF
SF
123
01/02
WA
UP, WA
QW
789
20/11
D
D
SF
678
31/12
OT
OT
我希望获得 DESIRED COLUMN。逻辑如下:
- 有条件区分Col1是否等于SF
- 如果 Col1 NOT 等于 SF 那么我将 groupby 用于 Col3 并且我将汇总 Col4[=35= 的项目]
- 如果 Col1 等于 SF 那么我将 groupby 用于 Col2 和 Col3 并且我将汇总 Col4
的项目
我的问题在哪里?我不知道我是否想多了,但是使用 groupby pandas 会减少数据帧的行数。我的 objective 只是添加一列,就像我上面显示的那样。
提前致谢!!!
使用GroupBy.transform
with 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 在 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)
我已经发布了一个问题,但我提出的问题很糟糕。 这是我的问题:
我有一个这样的数据框:
Col1 | Col2 | Col3 | Col4 | DESIRED COLUMN |
---|---|---|---|---|
SF | 123 | 01/02 | UP | UP, WA |
BF | 543 | 30/12 | DO | DO, AF |
QW | 241 | 30/12 | AF | DO, AF |
SF | 123 | 01/02 | WA | UP, WA |
QW | 789 | 20/11 | D | D |
SF | 678 | 31/12 | OT | OT |
我希望获得 DESIRED COLUMN。逻辑如下:
- 有条件区分Col1是否等于SF
- 如果 Col1 NOT 等于 SF 那么我将 groupby 用于 Col3 并且我将汇总 Col4[=35= 的项目]
- 如果 Col1 等于 SF 那么我将 groupby 用于 Col2 和 Col3 并且我将汇总 Col4 的项目
我的问题在哪里?我不知道我是否想多了,但是使用 groupby pandas 会减少数据帧的行数。我的 objective 只是添加一列,就像我上面显示的那样。
提前致谢!!!
使用GroupBy.transform
with 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 在 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)