在python中添加到df中的列
我有一个csv文件,我正在转换成一个数据帧。其中一列在python中添加到df中的列,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个csv文件,我正在转换成一个数据帧。其中一列a大部分用数字填充,偶尔用零填充。我想创建一个新列e,它是a+500列中的数字,除非a列在该行中有一个0。在这些情况下,它应该保持0。或者我想如果列e是a+500,那么e中所有500的情况都变成了零,那么它也会起作用。任何帮助都会很好,我对使用pandas/python还不熟悉 我建议编写一个函数并使用pd。像这样应用: import pandas as pd df = pd.DataFrame({'a': [0, 1]}) def add50
a
大部分用数字填充,偶尔用零填充。我想创建一个新列e
,它是a+500列中的数字,除非a
列在该行中有一个0
。在这些情况下,它应该保持0
。或者我想如果列e
是a+500
,那么e
中所有500
的情况都变成了零,那么它也会起作用。任何帮助都会很好,我对使用pandas/python还不熟悉 我建议编写一个函数并使用pd。像这样应用
:
import pandas as pd
df = pd.DataFrame({'a': [0, 1]})
def add500ifnot0(c):
if c == 0:
return c
else:
return c + 500
df['e'] = df['a'].apply(add500ifnot0)
df
试试这个:
df['new_a'] = df['a'].astype('int').map(lambda x: x+500 if x != 0 else 0)
示例数据帧
解决方案
您可以使用以下命令快速生成列:
>>> df['e'] = df['a'].where(df['a'] == 0, df['a'] + 500)
>>> df
a b e
0 100 200 600
1 0 500 0
2 200 0 700
演出
对于包含300万行的数据帧:
n = int(1e6)
df = pd.DataFrame({'a': [100, 0, 200] * n, 'b': [200, 500, 0] * n})
使用apply(如这里另一个答案中所建议的)非常慢:
%timeit df['new_a'] = df['a'].astype('int').map(lambda x: x+500 if x != 0 else 0)
1 loops, best of 3: 2.5 s per loop
与使用where()
相比:
大约快28倍。嗨!欢迎光临!你的问题太宽泛了。请阅读并开始自己尝试。一旦你陷入困境,请在此提供一个解决方案!非常感谢。我不同意@jkalden的观点,因为这个问题相当具体,但标题非常误导。请将标题编辑为更具体的内容,如“根据其他列的值为python中df中的列添加值”。我同意您应该添加一个最少的示例,至少显示输入和预期输出。
%timeit df['new_a'] = df['a'].astype('int').map(lambda x: x+500 if x != 0 else 0)
1 loops, best of 3: 2.5 s per loop
%timeit df['e'] = df['a'].where(df['a'] == 0, df['a'] + 500)
10 loops, best of 3: 90.9 ms per loop