我有一个大的数据帧df(~100列和~700万行),我需要创建~50个新的变量/列,它们是当前变量的简单转换.一种方法是使用许多.apply语句(我只是transform*用作简单转换的占位符,例如max或平方):
df['new_var1'] = df['old_var1'].apply(lambda x : transform1(x))
...
df['new_var50'] = df['old_var50'].apply(lambda x : transform50(x))
Run Code Online (Sandbox Code Playgroud)
另一种方法是首先创建一个字典
transform_dict = {
'new_var1' : lambda row : transform1(row),
...,
'new_var50' : lambda row : transform50(row)
}
Run Code Online (Sandbox Code Playgroud)
然后写一个.apply结合.concat:
df = pd.concat([df,
df.apply(lambda r: pd.Series({var : transform_dict[var](r) for var in transform_dict.keys()}), axis=1)], axis=1)
Run Code Online (Sandbox Code Playgroud)
一种方法优于另一种方法,无论是"Pythonic"如何,还是效率,可扩展性,灵活性?
这对我来说是一个令人头疼的问题; 我在Mac OS 10.11.6上,最近我开始使用sbtscala.我快到我每次运行一个命令SBT的情况下(如sbt run,sbt test等)的特定小Hello World类型的项目(包括在这篇文章的底部),我失去了看到我的键盘敲击之后的能力.我的标准提示仍然存在,但我输入的任何内容都没有出现.键盘仍然是注册的,因为我可以键入ls,按ENTER键仍然可以看到输出,但我看不到我键入的内容ls.
也许更令人困惑的是,如果我跑步sbt并进入交互模式,我可以看到我的按键!同样,我可以在scala REPL和IPython会话中看到我的击键.但是,我无法在标准python解释器中看到我的击键!
它似乎不是我的问题$PS1,因为我可以unset PS1,问题是相同的.其他项目似乎也没有.
目录结构是标准sbt结构,它位于src/main/scala/Hello.scala:
object Hello extends App {
val p = Person("Foo")
println("Hello from " + p.name)
}
case class Person(var name: String)
Run Code Online (Sandbox Code Playgroud)
是否有可能当我将其复制/粘贴到vim(从.pdf中,如果相关的话)时,一些奇怪的角色隐藏在那里?否则,这是怎么回事?
我发现dask.dataframe.rename无论何时从镶木地板文件中读取数据帧,都会显着增加计算时间:
In [1]: import dask.dataframe as dd
...: df = dd.demo.daily_stock('GOOG', '2008', '2010', freq='1s', random_state=1234)
...:
In [2]: %time df.close.mean().compute()
CPU times: user 7.73 s, sys: 1.15 s, total: 8.88 s
Wall time: 3.5 s
Out[2]: 452.30345234893554
In [3]: %time df = df.rename(columns={col: col.upper() for col in df.columns}); df.CLOSE.mean().compute()
CPU times: user 8.06 s, sys: 1.21 s, total: 9.27 s
Wall time: 3.81 s
In [4]: df.to_parquet('df', compression='GZIP')
...: df = dd.read_parquet('df')
...:
In [5]: %time df.CLOSE.mean().compute()
CPU …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个大型的JTextField对象数组,由于某种原因,我的代码将无法编译.我现在已经玩了很久了,我找不到编译器生气的好理由; 这是我的代码只有一个长度为2的数组:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class SUDOKU_temp extends JApplet
{
//declare fields
public JTextField[] fields = new JTextField[2];
fields[0] = new JTextField();
fields[1] = new JTextField();
//other stuff happens down here that the compiler is ok with
}
Run Code Online (Sandbox Code Playgroud)
如果我只运行长度为1的数组的代码,我会得到完全相同的错误,它们是:
linux63:~demo$ ./compile
SUDOKU_temp.java:11: ']' expected
fields[0] = new JTextField();
^
SUDOKU_temp.java:11: ';' expected
fields[0] = new JTextField();
^
SUDOKU_temp.java:11: illegal start of type
fields[0] = new JTextField();
^
SUDOKU_temp.java:11: <identifier> expected
fields[0] = new JTextField(); …Run Code Online (Sandbox Code Playgroud)