使用熊猫从数据框中过滤出数据

时间:2019-12-11 07:12:46

标签: python dataframe

我正在尝试从以下数据框中过滤出数据:

dataframe

我想解析“名称”列和type1中匹配的行的每个值-我想获取这些值。

所以我首先要在dictionary1中使用Name列的值。 那么对于该字典1的每个值-如果该值与作为字典2的Type1列的值匹配,则将作为字典3的Value列的值获取

有人可以帮我提供python代码吗?

预期输出:

对于Type1中与Name匹配的每个值,获取Value1

2 个答案:

答案 0 :(得分:1)

您可以尝试如下操作:

import pandas as pd
df = pd.DataFrame({'type1':['a','a','a','a','b','b','b','b','b','c','c','c','d','d'],'value':['q','w','e','r','t','y','u','i','o','p','a','s','d','f']})
df.groupby('type1').agg(list).to_dict('index')

{'a': {'value': ['q', 'w', 'e', 'r']},
 'b': {'value': ['t', 'y', 'u', 'i', 'o']},
 'c': {'value': ['p', 'a', 's']},
 'd': {'value': ['d', 'f']}}

答案 1 :(得分:1)

假设您的数据保存在 df

extracted = {}
for k in df.name:
    values = []
    for i, value in enumerate(df.type1):
        if value == k:
            values.append(df.type2[i])
    extracted[k] = values

您可以使用列表推导在一行中提取数据:

{k:[df.type2[i] for i, value in enumerate(df.type1) if value==k] for k in df.name}

两者的产量:

{'a': ['q', 'w', 'e', 'r'], 'b': ['t', 'y', 'u', 'i', 'o'], 'c': ['p', 'a', 's'], 'd': ['d', 'f']}

您还可以像这样将dict中的值设置为DataFrames:

{k:df.type2[df.type1==k] for k in df.name}

产生:

{'a': 
0    q
1    w
2    e
3    r
Name: type2, dtype: object, 
'b': 
4    t
5    y
6    u
7    i
8    o
Name: type2, dtype: object, 
'c': 
9     p
10    a
11    s
Name: type2, dtype: object, 
'd': 
12    d
13    f
Name: type2, dtype: object}