Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据其他列的值从数据帧中提取数据?_Python_Pandas_Python 2.7_Dataframe - Fatal编程技术网

Python 如何根据其他列的值从数据帧中提取数据?

Python 如何根据其他列的值从数据帧中提取数据?,python,pandas,python-2.7,dataframe,Python,Pandas,Python 2.7,Dataframe,我有一个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),

我有一个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和STORE_ID以及MKT分别是PERIOD、STORE和items。 @jezrael建议的编辑将上述df返回给我

d1={306L: (8207L, 8209L .... 8210L, 8211L),307L:( 8215L, 8219L ... 8233L, 8235L), 308: (8238L, 8239L....8244L, 8252L) ..k:(v) ..}
(注意:由于原始词典很大,编辑后的词典看起来很小)

对于示例数据,它工作正常,但对于此数据帧,情况并非如此

将@jezrael作为一个最小的、可复制的示例进行编辑

df=

电流输出符合@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“包括MM的供应”、“PM供应”MKT是重复的,因为它们具有相同的存储ID集,而对于期间 20171412L,“鱼”、“酒”市场是重复的,因为它们具有相同的存储ID集

我刚接触熊猫,但对Python有一些基本的了解。 我真的不知道如何才能做到这一点。
任何帮助都会很好。

创建
多索引系列
并在字典理解中创建嵌套字典:

s = df.groupby(['period','item'])['store'].apply(tuple)

d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{1: {'A': (32, 34), 'B': (32, 34)}, 2: {'X': (42, 44), 'Y': (42, 44)}}
编辑:您可以按
期间
分组,并将
转换为集合,然后转换为元组:

d1 = {k:tuple(set(v)) for k, v in df.groupby('period')['item']}
print (d1)
{1: ('A', 'B'), 2: ('X', 'Y')}

d1 = df.groupby('period')['item'].apply(lambda x: tuple(set(x))).to_dict()
print (d1)
{1: ('A', 'B'), 2: ('X', 'Y')}

你可以通过听写理解:

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


{p:g.groupby('item')['store'].apply(tuple).to_dict()for p,g in df.groupby('period')}
Hi@jezrael,你能帮我做一件事吗,在同一个数据框A中,我需要在此基础上找到重复项,如果项目wrt到periods的存储集完全相同,那么这些项就是重复项。对于ex:A,B是重复的,因为它们在时段1中具有相同的存储,同样地,X,Y是时段2的重复。最后,我希望得到这样的输出,dictout={1:(A,B),2:(X,Y)}。你能帮忙吗?谢谢,但是你建议的编辑会返回该时期的一组独特项目,我需要一本该时期的重复项目字典。重复的条件:如果某个项目在各个期间的存储集与同一期间内的任何其他项目完全相同,则这两个项目都是重复的。因此,在给定的示例中,A、B和X、Y分别是周期1和周期2的重复项,因为它们具有相同的存储。@thebigshaikh-当然,给我一点时间。@thebigshaikh-你能测试
df1=df[df.duplicated(['period','item'],keep=False)]d1={k:tuple(set(v)),df1中的k,v.groupby('period')['item']}
?是的,请稍等一下。你好@Chris A,你能帮我再做一件事吗,在同一个数据框A中,在这个问题中,我需要基于此找到重复项,如果项目wrt到周期的存储集完全相同,那么这些项目是重复项。对于ex:A,B是重复的,因为它们在时段1中具有相同的存储,同样地,X,Y是时段2的重复。最后,我希望得到这样的输出,dictout={1:(A,B),2:(X,Y)}。你能帮忙吗?
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)}}