我目前正在将熊猫的数据框中的经度,纬度坐标投影到笛卡尔平面上。因此,我有一种投影方法:</ p>
def convert_lat_long_xy(lat, lo):
return x, y
因此,这将返回一个元组,并且我可以在数据框上使用以下方法:
df.apply(lambda x: convert_lat_long_xy(x.latitude, x.longitude), axis=1))
现在,我想做的是在数据框中创建两个额外的列,分别称为“ x”和“ y”,以容纳这些值。我知道我可以做类似的事情:
df['proj'] = df.apply(lambda x: convert_lat_long_xy(x.latitude, x.longitude), axis=1))
但是是否可以将值添加到两个不同的列中?
答案 0 :(得分:1)
是的,您需要将lambda
的输出转换为pd.Series。这是一个示例:
In [1]: import pandas as pd
In [2]: pd.DataFrame(["1,2", "2,3"], columns=["coord"])
Out[2]:
coord
0 1,2
1 2,3
In [3]: df = pd.DataFrame(["1,2", "2,3"], columns=["coord"])
In [4]: df.apply(lambda x: pd.Series(x["coord"].split(",")), axis=1)
Out[4]:
0 1
0 1 2
1 2 3
In [5]: df[["x", "y"]] = df.apply(lambda x: pd.Series(x["coord"].split(",")), axis=1)
In [6]: df
Out[6]:
coord x y
0 1,2 1 2
1 2,3 2 3
对于您的特定情况,df.apply
会变成这样:
df[['x', 'y']] = df.apply(lambda x: pd.Series(convert_lat_long_xy(x.latitude, x.longitude)), axis=1))