微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

列表理解中的多重循环和赋值

如何解决列表理解中的多重循环和赋值

假设我有以下数据设置:

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)

这将为我提供以下数据框:

enter image description here

我想创建一个元组 (x,y,z) 组成的 DataFrame,其中 xa1 中,ya2 中,而 zdf1

y 中查找

我现在可以从下面创建 (x,y):

DataFrame([[(x,y) for x in a1] for y in a2])

enter image description here

我的问题是如何通过列表理解方法元组获取 z

我尝试过类似 DataFrame([[(x,z) for x in a1] for y in a2 for z:=df1.loc[y]['values']])方法,但无法使其正常工作。

解决方法

使用DataFrame.loc

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 包含来自 a2y 的来源)的所有值,因此您可以使用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?