【发布时间】:2016-04-07 16:59:25
【问题描述】:
我正在尝试通过有条件地填充列来更新我的数据框。我想将数据帧行中的值与元组的值进行比较,然后用元组中的另一个值填充同一数据帧行的不同列。
例如:
foo = pd.DataFrame({"TIME":([1,1,2,2,3,3,4,4,5,5,6,6]),
"PLACE": (["place1","place2","place1","place2","place1","place2","place1","place2","place1","place2","place1","place2"]),
"Xcords" :(["","","","","","","","","","","",""]),
"Ycords" :(["","","","","","","","","","","",""])})
还有一个包含地点及其 x 和 y 坐标的元组:
bar = [('place1','1','11'),('place3','3','33'),('place2','2','22')]
最后我想要以下:
PLACE TIME Xcords Ycords
0 place1 1 1 11
1 place2 1 2 22
2 place1 2 1 11
3 place2 2 2 22
4 place1 3 1 11
5 place2 3 2 22
6 place1 4 1 11
7 place2 4 2 22
8 place1 5 1 11
9 place2 5 2 22
10 place1 6 1 11
11 place2 6 2 22
因此,如果数据框“PLACE”列值与同一数据框行中的元组第一个值匹配,则 Xcords 和 Ycords 应填充元组的第二个和第三个值。这应该发生在所有实例上,因为它们可能出现不止一次。
这样的正确语法是什么?我已经尝试过了,但是我所有的 X_cords 和 Y_cords 行最终都具有相同的值:
for i in bar:
if any(foo["PLACE"]==i[0]):
foo.X_cords = i[1]
foo.Y_cords = i[2]
由于两个数据集都非常大,是否也可以避免 for 循环?
【问题讨论】:
-
11和22来自哪里? -
我编辑了元组,它应该是 1,11-2,22-3,33
标签: python python-2.7 pandas dataframe tuples