Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中添加到df中的列_Python_Python 3.x_Pandas - Fatal编程技术网

在python中添加到df中的列

在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

我有一个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 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