如何解决列表理解中的多重循环和赋值
假设我有以下数据设置:
a1=[1,2,3]
a2=['a','b','c']
df1 = DataFrame([['a','x_a'],['b','x_b'],['c','x_c']],columns=['keys','values'])
df1.set_index('keys',inplace=True)
这将为我提供以下数据框:
我想创建一个由元组 (x,y,z)
组成的 DataFrame,其中 x
在 a1
中,y
在 a2
中,而 z
是df1
y
中查找
我现在可以从下面创建 (x,y):
DataFrame([[(x,y) for x in a1] for y in a2])
我尝试过类似 DataFrame([[(x,z) for x in a1] for y in a2 for z:=df1.loc[y]['values']])
的方法,但无法使其正常工作。
解决方法
df1 = pd.DataFrame([[(x,y,df1.loc[y,'values']) for x in a1] for y in a2])
print (df1)
0 1 2
0 (1,a,x_a) (2,x_a) (3,x_a)
1 (1,b,x_b) (2,x_b) (3,x_b)
2 (1,c,x_c) (2,x_c) (3,x_c)
或者通过 dict.get
按字典选择值 - 如果没有匹配的值更好:
a1=[1,2,3]
a2=['a','b','c','d']
df1 = pd.DataFrame([['a','x_a'],['b','x_b'],['c','x_c']],columns=['keys','values'])
df1.set_index('keys',inplace=True)
d = df1['values'].to_dict()
df1 = pd.DataFrame([[(x,d.get(y,None)) for x in a1] for y in a2])
print (df1)
0 1 2
0 (1,x_a) (2,x_a) (3,x_a)
1 (1,x_b) (2,x_b) (3,x_b)
2 (1,x_c) (2,x_c) (3,x_c)
3 (1,d,None) (2,None) (3,None)
,
由于 keys
中的索引 df1
包含来自 a2
(y
的来源)的所有值,因此您可以使用 df1['values'][y]
来获取适当的df1
的值:
a1=[1,'c']
df1 = DataFrame([['a',inplace=True)
pd.DataFrame([[(x,df1['values'][y]) for x in a1] for y in a2])
输出:
0 1 2
0 (1,x_c)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。