我正在尝试从以下数据框中过滤出数据:
我想解析“名称”列和type1中匹配的行的每个值-我想获取这些值。
所以我首先要在dictionary1中使用Name列的值。 那么对于该字典1的每个值-如果该值与作为字典2的Type1列的值匹配,则将作为字典3的Value列的值获取
有人可以帮我提供python代码吗?
预期输出:
对于Type1中与Name匹配的每个值,获取Value1
答案 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}