gpt4 book ai didi

python - 如何根据其他列的值从 Pandas 数据框中提取数据?

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:55 28 4
gpt4 key购买 nike

我有一个 df=

A= 
[period store item
1 32 'A'
1 34 'A'
1 32 'B'
1 34 'B'
2 42 'X'
2 44 'X'
2 42 'Y'
2 44 'Y']

我想找到那个时期某件商品的所有商店最好在这样的字典中:

dicta = {1: {'A': (32, 34),'B': (32, 34)}, 2: {'X': (42, 44),'Y': (42, 44)}}

为@JEZRAEL 编辑

Actual df
RTYPE PERIOD_ID STORE_ID MKT MTYPE RGROUP RZF RXF
0 MKT 317 13178 Kiosks_11 CELL NaN NaN NaN
1 MKT 306 11437 Kiosks_11 CELL NaN NaN NaN
2 MKT 306 12236 Kiosks_11 CELL NaN NaN NaN
3 MKT 312 11024 Kiosks_11 CELL NaN NaN NaN
4 MKT 307 13010 Kiosks_11 CELL NaN NaN NaN
5 MKT 307 12723 Kiosks_11 CELL NaN NaN NaN
6 MKT 306 14218 Kiosks_11 CELL NaN NaN NaN
7 MKT 306 13547 Kiosks_11 CELL NaN NaN NaN
8 MKT 316 12396 Kiosks_11 CELL NaN NaN NaN
9 MKT 306 10778 Cafes_638 CELL NaN NaN NaN
10 MKT 317 11230 Kiosks_11 CELL NaN NaN NaN
11 MKT 315 13630 Kiosks_11 CELL NaN NaN NaN
12 MKT 314 14113 Bars_13 CELL NaN NaN NaN
13 MKT 314 12089 Kiosks_11 CELL NaN NaN NaN

这里PERIOD_ID AND STORE_ID和MKT分别是periods,stores,items。@jezrael 建议的编辑为上面的 df 返回了这个。

d1={306L: (8207L, 8209L .... 8210L, 8211L),307L:( 8215L, 8219L ... 8233L, 8235L), 308: (8238L, 8239L....8244L, 8252L) ..k:(v) ..}

(注意:由于原始词典很大,因此进行了编辑以使其看起来很小)

对于示例数据,它按预期工作正常,但对于此数据框则不然。

将@jezrael 编辑为最小的、可重现的示例。

df=

   RTYPE  PERIOD_ID    STORE_ID                       MKT MTYPE  RGROUP  RZF  RXF
0 MKT 20171411 3102300001 PM KA+PM PROV+SMKT+PETRO CELL NaN NaN NaN
1 MKT 20171411 3102300002 PM KA+PM PROV+SMKT+PETRO CELL NaN NaN NaN
2 MKT 20171411 3104001193 PM Provision CELL NaN NaN NaN
3 MKT 20171411 3104001193 PM KA+PM PROV+SMKT+PETRO CELL NaN NaN NaN
4 MKT 20171411 3104001193 Provision including MM CELL NaN NaN NaN
5 MKT 20171411 3104001641 PM Provision CELL NaN NaN NaN
6 MKT 20171411 3104001641 PM KA+PM PROV+SMKT+PETRO CELL NaN NaN NaN
7 MKT 20171411 3104001641 Provision including MM CELL NaN NaN NaN
8 MKT 20171411 3104001682 PM Provision CELL NaN NaN NaN
9 MKT 20171411 3104001682 PM KA+PM PROV+SMKT+PETRO CELL NaN NaN NaN
10 MKT 20171411 3104001682 Provision including MM CELL NaN NaN NaN
11 MKT 20171412 3104001682 Alcohol CELL NaN NaN NaN
12 MKT 20171412 3104001682 Fish CELL NaN NaN NaN
13 MKT 20171412 3104001684 Alcohol CELL NaN NaN NaN
14 MKT 20171412 3104001684 Fish CELL NaN NaN NaN

根据@jezraels 代码的当前输出

{20171411L: ('Provision including MM', 'PM Provision', 'PM KA+PM PROV+SMKT+PETRO'), 20171412L: ('Fish', 'Alcohol')}

预期输出:

{20171411L: ('Provision including MM', 'PM Provision'), 20171412L: ('Fish', 'Alcohol')}

对于期间 20171411L'Provision including MM'、'PM Provision' MKT 是重复的,因为它们具有相同的 store_id 集,而对于期间20171412L,“鱼”、“酒精”MKT 是重复的,因为它们具有相同的 store_id 集。

我是 Pandas 的新手,但对 Python 有一些基础知识。真的不知道我怎么能做到这一点。任何帮助都会很棒。

最佳答案

你可以用字典理解来做:

dicta = {p: g.groupby('item')['store'].apply(tuple).to_dict()
for p, g in df.groupby('period')}

[输出]

{1: {"'A'": (32, 34), "'B'": (32, 34)}, 2: {"'X'": (42, 44), "'Y'": (42, 44)}}

关于python - 如何根据其他列的值从 Pandas 数据框中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57573120/

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