我在 pySpark 工作,我有一个变量 LATITUDE,它有很多小数位。我需要从中创建两个新变量,一个是四舍五入的,一个是截断的。均为小数点后三位。
截断值的最简单方法是什么?
为了四舍五入,我做了:
raw_data = raw_data.withColumn("LATITUDE_ROUND", round(raw_data.LATITUDE, 3))
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但如果有更好的方法,请告诉我。
我有一个列,我已经使用pandas转换为datetime,所以现在它的格式为datetime64.
LOCAL_TIME_ON
2014-06-21 15:32:09
2014-06-07 20:17:13
Run Code Online (Sandbox Code Playgroud)
我想将小时提取到一个新列.我发现唯一有效的方法是下面的,但是,我得到了一个SettingWithCopyWarning.有没有人有一个更干净的方式我可以做到这一点?
TRIP_INFO_TIME['TIME_HOUR'] = pd.DatetimeIndex(TRIP_INFO_TIME['LOCAL_TIME_ON']).hour.astype(int)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2016.1.4\helpers\pydev\pydevconsole.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy '''
我是Python的新手,我坚持如何有条件地抵消价值.当我只需要创建一个新列时,我已经成功地使用了shift功能.但是,这似乎不适用于某个功能.
原始df:
BEGIN SPEED SPEED_END
322 28 0
341 0 23
496 5 1
500 0 0
775 0 0
979 0 0
1015 0 0
1022 0 14
1050 11 6
Run Code Online (Sandbox Code Playgroud)
我希望将BEGIN值更改为先前的记录BEGIN值,并将SPEED值更改为SPEED记录where SPEED=0和previous 之前的记录值SPEED_END=0.
所以上面的表应该是:
BEGIN SPEED SPEED_END
322 28 0
322 28 23
496 5 1
500 0 0
500 0 0
500 0 0
500 0 0
500 0 14
1050 11 6
Run Code Online (Sandbox Code Playgroud)
我尝试了很多不同的东西.目前,我试过:
def cont(row,param): …Run Code Online (Sandbox Code Playgroud)