根据其他列的内容删除列中的某些值

时间:2018-04-30 13:51:40

标签: python dataframe transformation

我有一个如下所示的数据框:

   Deal      Year  Financial Data1  Financial Data2  Financial Data3  Quarter
0     1  1991/1/1              122              123              120        1
3     1  1991/1/1              122              123              120        2
6     1  1991/1/1              122              123              120        3
1     2  1992/1/1               85               90               80        4
4     2  1992/1/1               85               90               80        5
7     2  1992/1/1               85               90               80        6
2     3  1993/1/1               85               90              100        1
5     3  1993/1/1               85               90              100        2
8     3  1993/1/1               85               90              100        3

但是我只想在每笔交易中显示第一季度的财务数据1,并且整个事情再次合并为一列。

最终结果应如下所示:

       Deal    Year         Financial Data   Quarter
    0     1  1991/1/1              122          1
    3     1  1991/1/1              123          2
    6     1  1991/1/1              120          3
    1     2  1992/1/1               85          4
    4     2  1992/1/1               90          5
    7     2  1992/1/1               80          6
    2     3  1993/1/1               85          1
    5     3  1993/1/1               90          2
    8     3  1993/1/1              100          3

1 个答案:

答案 0 :(得分:1)

Okie dokie,使用np.where()我认为这可以做你正在尝试做的事情:

import pandas as pd
import numpy as np

df = pd.read_fwf(StringIO(
"""Deal      Year  Financial_Data1  Financial_Data2  Financial_Data3  Quarter
1     1991/1/1  122              123              120              1
1     1991/1/1  122              123              120              2
1     1991/1/1  122              123              120              3
2     1992/1/1  85               90               80               4
2     1992/1/1  85               90               80               5
2     1992/1/1  85               90               80               6
3     1993/1/1  85               90               100              1
3     1993/1/1  85               90               100              2
3     1993/1/1  85               90               100              3"""))


df['Financial_Data'] = np.where(
    # if 'Quarter'%3==1
    df['Quarter']%3==1,
    # Then return Financial_Data1
    df['Financial_Data1'], 
    # Else
    np.where(
        # If 'Quarter'%3==2
        df['Quarter']%3==2,
        # Then return Financial_Data2 
        df['Financial_Data2'],  
        # Else return Financial_Data3
        df['Financial_Data3']
    )
)

# Drop Old Columns
df = df.drop(['Financial_Data1', 'Financial_Data2', 'Financial_Data3'], axis=1)

print(df)

输出:

   Deal      Year  Quarter  Financial_Data
0     1  1991/1/1        1             122
1     1  1991/1/1        2             123
2     1  1991/1/1        3             120
3     2  1992/1/1        4              85
4     2  1992/1/1        5              90
5     2  1992/1/1        6              80
6     3  1993/1/1        1              85
7     3  1993/1/1        2              90
8     3  1993/1/1        3             100

(PS:我不是100%确定你打算如何处理第4-6区,在这个例子中我只是将它们视为1-3)