更新:@AntonvBR的答案有效。非常感谢强>
此外,因为这里我要处理一个tea列中的每个元素,所以它实际上是一个Series
而不是一个DataFrame
。因此,我猜.apply()
的工作原理与.map()
相同
原始问题:
很抱歉,我不知道如何更好地表达我的观点,但这里有一个问题:
假设有两个数据帧,学生和老师。
学生数据框有两列:ID和home(她或他来自哪个城市)。当然,ID是唯一的
另一方面,教师数据框也有两列:ID和学生ID的列表(在他们的班级中)
两者是这样的:
In [72]: stu
Out[72]:
ID home
0 1 XA
1 2 BJ
2 3 TJ
3 4 JN
4 5 CQ
5 6 SH
6 7 GZ
7 8 BJ
8 9 TJ
9 10 BJ
In [75]: tea
Out[75]:
ID stu
0 1 [1, 2, 3]
1 2 [2, 7, 8, 9]
2 3 [4, 5, 6, 10]
现在我想增加关于教师的第三列,它也包含教师的学生的家庭的列表,每个列表中应该没有重复的
所以我想知道我怎样才能以一种看起来整洁干净的方式来做这件事
我对pandas和SQL还不熟悉,我想到的唯一方法就是迭代每一行,迭代每一个列表,从另一个DataFrame获取值,然后逐个追加它们
请给我一些建议或提示
非常感谢
好吧,这是一个很小的问题,可以用很多方法来解决。不管怎样, 在
stu
列中有对象的事实使事情变得有点复杂考虑这个例子:
退货:
简短解释: 应用于dataframe列的
.apply()
将获取所有元素,并为每个元素执行一个函数(在本例中表示行值)。 通过传递lambda函数,表达式变得非常紧凑。 我们要为每个行元素中的每个元素找到student home。为此,我们可以使用列表理解并从我们在上面一行中创建的字典(map)中获取值m.get(i, 'N/A')
将获取每个值,如果找不到,则返回N/A
。这使得脚本更“安全”希望这对你有帮助
相关问题 更多 >
编程相关推荐