使用pandas从数据帧中过滤出数据

2024-06-09 05:29:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从以下数据帧中筛选出数据:

dataframe

我想解析列名,对于type1中匹配的行的每个值-我想得到值

所以我首先需要字典中Name列的值1。 然后对于这个dictionary1的每个值-如果该值与作为dictionary2的Type1列的值匹配,则获取作为dictionary3的value列的值

有人能帮我写python代码吗

预期产量:

对于Type1中名称匹配的每个值,获取Value1


Tags: 数据代码name名称字典value产量value1
2条回答

你可以这样做:

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']}}

假设您的数据保存在数据框中:

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中的值设为如下数据帧:

{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}

相关问题 更多 >