我希望在多个列中过滤值,为唯一值组合创建数据帧。任何帮助将不胜感激。
这是我失败的代码(给定数据帧df):
dd = defaultdict(dict) #create blank default dictionary
values_col1 = df.col1.unique() #get the unique values from column 1 of df
for i in values_col1:
dd[i] = df[(df['col1']==i)] #for each unique value create a sorted df and put in in a dictionary
values_col2 = dd[i].col2.unique() #get the unique values from column2 of df
for m in values_col2:
dd[i][m] = dd[i][(dd[i]['col2']==m)] #for each unique column2 create a sub dictionary
当我运行它时,我收到一条非常长的错误消息。我不会在这里插入整个内容,但这里有一些内容:
get_loc中的C:\ Anaconda3 \ lib \ site-packages \ pandas \ _dex \ base.py(self, 关键,方法,容忍)1944试试: - > 1945年返回self._engine.get_loc(key)1946,除了KeyError:
...
ValueError:传递的项目数量错误6,展示位置意味着1
答案 0 :(得分:2)
使用pandas groupby
功能提取数据框的唯一索引和相应的行。
import pandas as pd
from collections import defaultdict
df = pd.DataFrame({'col1': ['A']*4 + ['B']*4,
'col2': [0,1]*4,
'col3': np.arange(8),
'col4': np.arange(10, 18)})
dd = defaultdict(dict)
grouped = df.groupby(['col1', 'col2'])
for (c1, c2), g in grouped:
dd[c1][c2] = g
这是生成的df
:
col1 col2 col3 col4
0 A 0 0 10
1 A 1 1 11
2 A 0 2 12
3 A 1 3 13
4 B 0 4 14
5 B 1 5 15
6 B 0 6 16
7 B 1 7 17
这是提取的dd
(好吧,dict(dd)
真的)
{'B': {0: col1 col2 col3 col4
4 B 0 4 14
6 B 0 6 16,
1: col1 col2 col3 col4
5 B 1 5 15
7 B 1 7 17},
'A': {0: col1 col2 col3 col4
0 A 0 0 10
2 A 0 2 12,
1: col1 col2 col3 col4
1 A 1 1 11
3 A 1 3 13}}
(我不知道你的用例是什么,但最好不要将groupby
对象解析为字典。