gpt4 book ai didi

python - 在键上加入 Pandas 数据框值

转载 作者:行者123 更新时间:2023-12-01 15:17:45 24 4
gpt4 key购买 nike

我是 pandas 的新手,正在尝试根据键连接数据框值。

我的数据框是这样的:

Slug  Position   Brand    Session   Transactions   Ecommerce   CTR   Click
A 0 aaa
A 1 bbb
A 2 ccc
A 3 ddd
B 0 bbb
B 1 ccc
B 2 ddd
B 3 eee
C 0 aaa
C 1 ccc
C 2 ddd
A 70 100 500
A abc fgh
B 60 900 400
B abd fgj
C 50 400 100
C ab fp


我试图使我的输出如下:

输出:

Slug  Position   Brand    Session   Transactions   Ecommerce   CTR   Click
A 0 aaa 70 100 500 abc fgh
A 1 bbb
A 2 ccc
A 3 ddd
B 0 bbb 60 900 400 abd fgj
B 1 ccc
B 2 ddd
B 3 eee
C 0 aaa 50 400 100 ab fp
C 1 ccc
C 2 ddd

数据集:

df = pd.DataFrame({'Slug': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'A', 'A', 'B', 'B', 'C', 'C'],
'Position': ['0', '1', '2', '3', '0', '1', '2', '3', '1', '2', '3', '', '', '', '', '', ''],
'Brand': ['aaa', 'bbb', 'ccc', 'ddd', 'aaa', 'bbb', 'ccc', 'ddd', 'aaa', 'bbb', 'ccc', '', '', '', '', '', ''],
'Session': ['', '', '', '', '', '', '', '', '', '', '', '70', '', '60', '', '50', ''],
'Transaction': ['', '', '', '', '', '', '', '', '', '', '', '80', '', '50', '', '40', ''],
'Ecommerce': ['', '', '', '', '', '', '', '', '', '', '', '700', '', '600', '', '500', ''],
'CTR': ['', '', '', '', '', '', '', '', '', '', '', '', 'abc', '', 'abd', '', 'ffp'],
'Click': ['', '', '', '', '', '', '', '', '', '', '', '', 'ab', '', 'fgh', '', 'fp']})

因此只需根据匹配的第一个键连接值。

我不确定我应该使用连接还是合并,因为数据在同一个数据框中,而不是两个不同的数据框中。

我试过了

df.set_index('Slug').join(df.set_index('Slug'))

但是得到这个错误:

ValueError: columns overlap but no suffix specified: Index(['Position', 'Brand', 'Sessions', 'Transactions', 'Ecommerce CR', 'CTR',
'All clickouts'],
dtype='object')

我将如何继续努力以获得我想要的结果?感谢您的建议。

最佳答案

首先我们使用 GroupBy.bfill 获取第一行每个组的值。

然后获取具有最低 Position 的行并保留这些值并将其他所有内容设置为 NaN

最后,我们通过过滤 Position not NaN 删除不需要的行:

df = df.replace('', np.NaN).groupby('Slug').apply(lambda x: x.bfill())

# df['Position'] = pd.to_numeric(df['Position']) --> Use this line if Position column is not numeric
df.loc[:, 'Session':] = (
df.loc[:, 'Session':].where(df['Position'] == df.groupby('Slug')['Position'].transform('min'))
)

df = df[df['Position'].notna()].replace(np.NaN, '')
   Slug  Position Brand Session Transaction Ecommerce  CTR Click
0 A 0.0 aaa 70 80 700 abc fgh
1 A 1.0 bbb
2 A 2.0 ccc
3 A 3.0 ddd
4 B 0.0 aaa 60 50 600 abd fgj
5 B 1.0 bbb
6 B 2.0 ccc
7 B 3.0 ddd
8 C 1.0 aaa 50 40 500 ab fp
9 C 2.0 bbb
10 C 3.0 ccc

解释:

使用 .loc,您可以选择数据帧的一部分,以便自己交替使用该部分。在本例中,我们选择 df.loc[“ session ”及以后的所有行、所有列]:

df.loc[:, 'Session':]

Session Transaction Ecommerce CTR Click
0 70 80 700 abc fgh
1 70 80 700 abc fgh
2 70 80 700 abc fgh
3 70 80 700 abc fgh
4 60 50 600 abd fgj
5 60 50 600 abd fgj
6 60 50 600 abd fgj
7 60 50 600 abd fgj
8 50 40 500 ab fp
9 50 40 500 ab fp
10 50 40 500 ab fp
11 70 80 700 abc fgh
12 NaN NaN NaN abc fgh
13 60 50 600 abd fgj
14 NaN NaN NaN abd fgj
15 50 40 500 ab fp
16 NaN NaN NaN ab fp

GroupBy.transform('min') 返回一个数组,其长度与我们的数据帧相同,并且在每一行上,每组 Position 的最低值 弹头:

df.groupby('Slug')['Position'].transform('min')

0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
5 0.0
6 0.0
7 0.0
8 1.0
9 1.0
10 1.0
11 0.0
12 0.0
13 0.0
14 0.0
15 1.0
16 1.0
Name: Position, dtype: float64

关于python - 在键上加入 Pandas 数据框值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59301116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com