【发布时间】:2019-08-20 11:55:59
【问题描述】:
我有一个 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 分别是时期、商店和项目。 @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')}
对于 Period 20171411L、'Provision including MM'、'PM Provision' MKT 是重复的,因为它们具有相同的 store_id 集,而对于 period 20171412L、'Fish'、'Alcohol' MKT 是重复的,因为它们具有相同的 store_id 集。
我是 Pandas 的新手,但对 Python 有一些基础知识。 真的不知道我怎么能做到这一点。 任何帮助都会很棒。
【问题讨论】:
-
{p: g.groupby('item')['store'].apply(tuple).to_dict() for p, g in df.groupby('period')}
标签: python pandas python-2.7 dataframe