首页 > 解决方案 > 以重复方式选择数据框行

问题描述

我有一个类似于

    name     2016 2017 2018 2019
0 google     nil  nil  nil  nil
1 investment  56   61   62  68
2 expense     23   25   32  45
3 research    19   22   25  37
4 rating      9    9     9   9
5 microsoft   nil  nil  nil  nil
6 investment  60   70   69  81
7 expense     50   60   70  80
8 research    9   15    21  23
9 rating      9    9     9   9
10 apple      nil  nil  nil  nil
11 investment  90   90   92  92
12 expense     56   55   54  54
13 research    2    3    2   6
14 rating      9    8    9   9

我想从中创建一个类似的数据框,但只有特定的数据,只选择具有名称的行,研究,然后通过从费用中减去投资来计算余额。示例输出

name     2016 2017 2018 2019
0 google     nil  nil  nil  nil
1 balance     33  36   30   33
2 research    19   22   25  37

依此类推,我尝试使用带有for循环的数学计算a,df.iloc[c]但没有运气......有什么帮助吗?

标签: pythonpandas

解决方案


对不起,我昨天看到了这个问题,但没有太多机会尝试一下。只要模型遵循您打印的结构,我就有一个可能的解决方案。

# variables
name = []
balance = []
research = []
ars = np.array([])
l_array = []

co = int(df.shape[0]/5) #every 5 rows a company 

for model,index in zip(df.values,df.index): #model is numpy.ndarray

    # Company name will always be in range +5 (like,0,5,10...)
    ranger   = [(lambda x: x*5)(x) for x in range(co)]
    rangei   = [(lambda x: x*5+1)(x) for x in range(co)]
    rangee   = [(lambda x: x*5+2)(x) for x in range(co)]
    rangere  = [(lambda x: x*5+3)(x) for x in range(co)]

    if index in ranger:

        name = model[0:] #everything

    if index in rangei:

        inv = model[1:] #values after name

    if index in rangee:

        exp = model[1:] #values after name
        val_bal = np.subtract(inv,exp)
        balance = np.insert(val_bal, 0, 'balance', axis=0)

    if index in rangere:

        research = model[0:] #everything
        ars = np.concatenate((name,balance,research))
        l_array.append(ars)

您可以从这里拆分数据框,或者您可以保持这种方式并将公司信息放在一行中。

new_df= pd.DataFrame(list(map(np.ravel, l_array)))

        0    1    2    3    4        5   6   ...  8   9         10  11  12  13  14
0     google  nil  nil  nil  nil  balance  33  ...  30  23  research  19  22  25  37
1  microsoft  nil  nil  nil  nil  balance  10  ...  -1   1  research   9  15  21  23
2      apple  nil  nil  nil  nil  balance  34  ...  38  38  research   2   3   2   6

推荐阅读