从一列中提取数据,另一列有条件 - pandas

Extracting data from one column with condition on other column - pandas

我有如下数据

Cust_ID  Age    Open_Balance
1          3    ,000.00
1        -15    ,000.00
1         59    ,000.00
2         -1    0,216.00
2         -1    7,523.00

3 需要借助 [Age] 和 [Open_Balance] 中的数据在同一数据框中创建新列,如下所示。

**df['0 to 30']=(df['Open Balance'] if (df['Age ']>0 and df['Age ']<=30) else 0)**
**df['30 to 60']=(df['Open Balance'] if (df['Age ']>30 and df['Age ']<=60) else 0)**
**df['Negative_amount']=(df['Open Balance'] if (df['Age ']<0) else 0)**

结果:

Cust_ID     Age Open Balance    0 to 30     30 to 60        Negative amount
1            3  ,000.00     ,000.00    0              0
1           -15 ,000.00     0             0              ,000.00
1           59  ,000.00     0             ,000.00     0
2           -1  0,216.00    0             0              0,216.00
2           -1  7,523.00    0             0              7,523.00

我是 python 的新手,并且尝试了很多来构建具有这些条件的逻辑,但无法做到。请帮助。

我试过如下:(但是它的saying系列有歧义)

CMM['0 到 30'] = CMM['Open Balance '][CMM['Age '] > 0 & CMM['Age '] <= 30] 提高 ValueError( ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

一堆 numpy.where 语句会在这里做

df['0 to 30'] = np.where( (df['Age']>0) & (df['Age']<=30) , df['Open_Balance'],0)
df['30 to 60'] = np.where( (df['Age']>30) & (df['Age']<=60) , df['Open_Balance'],0)
df['Negative_amount'] = np.where( df['Age']<0, df['Open_Balance'],0)


    Cust_ID Age Open_Balance    0 to 30     30 to 60    Negative_amount
0   1       3   ,000.00      ,000.00  0           0
1   1       -15 ,000.00      0           0           ,000.00
2   1       59  ,000.00      0           ,000.00  0
3   2       -1  0,216.00     0           0          0,216.00
4   2       -1  7,523.00     0           0          7,523.00
    

一个纯粹的Pandas解决方案是这样的:

df['0 to 30'] = df['Open Balance'][df['Age '] > 0 & df['Age '] <= 30]
df['30 to 60'] = df['Open Balance'][df['Age '] > 30 & df['Age '] <= 60]
df['Negative_amount'] = df['Open Balance'][df['Age '] < 0]

这会给您的数据框留下一堆 NaN 值。您可以在这些行之后通过 运行 df.fillna() 摆脱这些。

请注意,pandas 使用的条件语法与纯 Python 代码略有不同。我们在常规 python if 语句中使用 andor 的地方,在 Pandas 和 Numpy 中分别由 &| 替换.

您可以在此处仔细查看 Pandas 索引: Pandas indexing documentation