python - 如果满足条件,如何将两列添加或组合到数据框中的另一列中

标签 python pandas dataframe

我对此很陌生,所以这可能听起来很奇怪,但基本上,我有一个很大的数据帧,但为了简化目的,我们假设数据帧是这样的:

import pandas as pd
import numpy as np

dfn = pd.DataFrame({'a':[1,2,3,4,5],
                   'b':[6,7,8,9,10],
                   'c':np.nan})
dfn

输出:

    a   b   c
0   1   6   NaN
1   2   7   NaN
2   3   8   NaN
3   4   9   NaN
4   5   10  NaN

我想要做的是根据条件填充“c”列中的值,即如果“a”中对应的行值是奇数,则将其添加到对应的行值“b”中,然后输入到'c',否则,只需使用'a'值作为'c'。

我目前拥有的是:

for row in range(dfn.shape[0]):
    if dfn.loc[row]['a']%2!=0:
        dfn.loc[row]['c']=dfn.loc[row]['a']+dfn.loc[row]['b']
    else:
        dfn.loc[row]['c']=dfn.loc[row]['a']

dfn

输出:

    a   b   c
0   1   6   NaN
1   2   7   NaN
2   3   8   NaN
3   4   9   NaN
4   5   10  NaN

这里似乎什么也没发生,我也不完全确定为什么。

我还尝试了另一种方法:

is_odd=dfn[dfn['a']%2!=0]
is_odd['c'] = is_odd['a'] + is+odd['b']

is_odd

在这里,奇怪的是我得到了正确的输出:

    a   b   c
0   1   1   2
2   3   3   6
4   5   5   10

但是当我再次调用 dfn 时,它会显示所有 NaN 值。

我也尝试过在不使用变量名的情况下执行此操作,但没有任何反应。

知道我缺少什么或者是否有办法做到这一点?

谢谢!

最佳答案

使用numpy where ,适用于条件。它类似于 Python 中的 if 语句,但速度明显更快。我很少使用 iterrows,因为我发现它不如 numpy where 高效。

 dfn['c'] = np.where(dfn['a']%2 !=0, 
                     dfn.a + dfn.b,
                     dfn.a)


    a   b   c
0   1   6   7
1   2   7   2
2   3   8   11
3   4   9   4
4   5   10  15

基本上,np.where 中的第一行定义了您的条件,在本例中是查找“a”列是否为奇数。如果是,则执行下一行。如果是偶数,则执行最后一行。您可以将其视为 if-else 语句。

关于python - 如果满足条件,如何将两列添加或组合到数据框中的另一列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60668751/

相关文章:

python - 按日期拆分 DataFrame 并通过附加新记录和覆盖现有记录来重新组合

Python Pandas Dataframe : Nested JSON to columns, 查询 1 列并返回相应的单元格值

python - 时间序列: Mean per hour per day per Id number

python - 从 Python 列表中选择三个不同的值

python - 如何使用 pandas 和 sqlalchemy 进行分块读写

python - 如何在寻找最小值时获取带有列名的整行?

python-2.7 - 在 Python Pandas 中聚合组并输出特定计数的百分比

行绑定(bind)数据帧并保持唯一 ID 递增

python - 无法在 Excel 文件中正确写入提取的项目?

python - 如何使用 pytube 快速获取 YouTube 播放列表中的视频标题?