我最近发现了大熊猫"assign" method,我发现它非常优雅。 我的问题是新列的名称被指定为关键字,因此它不能包含空格或破折号。
| 9 | 2016-09-19 09:26:15 | 2016-09-19 23:59:59.000 |
| 9 | 2016-09-20 00:00:00 | 2016-09-20 01:18:02 |
但如果我想命名新专栏" ln(A)"例如? 例如。
df = DataFrame({'A': range(1, 11), 'B': np.random.randn(10)})
df.assign(ln_A = lambda x: np.log(x.A))
A B ln_A
0 1 0.426905 0.000000
1 2 -0.780949 0.693147
2 3 -0.418711 1.098612
3 4 -0.269708 1.386294
4 5 -0.274002 1.609438
5 6 -0.500792 1.791759
6 7 1.649697 1.945910
7 8 -1.495604 2.079442
8 9 0.549296 2.197225
9 10 -0.758542 2.302585
我知道我可以在.assign调用之后立即重命名该列,但我想更多地了解这个方法及其语法。
答案 0 :(得分:43)
您可以将关键字参数作为字典传递给assign
,如下所示:
kwargs = {"ln(A)" : lambda x: np.log(x.A)}
df.assign(**kwargs)
A B ln(A)
0 1 0.500033 0.000000
1 2 -0.392229 0.693147
2 3 0.385512 1.098612
3 4 -0.029816 1.386294
4 5 -2.386748 1.609438
5 6 -1.828487 1.791759
6 7 0.096117 1.945910
7 8 -2.867469 2.079442
8 9 -0.731787 2.197225
9 10 -0.686110 2.302585
答案 1 :(得分:6)
assign
需要一堆关键词参数。反过来,它将分配具有关键字名称的列。这很方便,但你不能把表达作为关键词。 @EdChum在此link
使用insert
代替原地转换
df.insert(2, 'ln(A)', np.log(df.A))
df
如果您不想要就地
,请使用concat
pd.concat([df, np.log(df.A).rename('log(A)')], axis=1)