如何在条件检查中从现有数据框中复制数据框中的选定行? [蟒蛇]

时间:2017-11-29 17:35:36

标签: python python-2.7 pandas dataframe

情景

我有数据框df1,需要根据列表y_km缩减到不同的数据框。 Dataframe df1保存数据如下:

          0         1         2
0  3.000000  4.000000  3.000000   
1  3.618555  3.646074  3.923834   
2  2.669256  2.769302  2.897346
3  4.340775  4.311200  4.341143

y_km[0, 3, 2, 1, 2, 3, 3, 3, 1, 1, 0, 1, 2]

我的代码段

df1 = pd.DataFrame(X)
df1 = df1.iloc[0:5,:10]
cl0 = pd.DataFrame()
cl1 = pd.DataFrame()
cl2 = pd.DataFrame()
cl3 = pd.DataFrame()

y_km = list(y_kmeans)
for i in y_kmeans:
    rows = df1.iloc[i, :]
    if i == 0:
        cl0 = cl0.append(rows, ignore_index=False)
    elif i == 1:
        cl1 = cl1.append(rows, ignore_index=False)
    elif i == 2:
        cl2 = cl2.append(rows, ignore_index=False)
    elif i == 3:
        cl3 = cl3.append(rows, ignore_index=False)

问题是,我的clX DFrame具有与首次插入时相同的记录。

1 个答案:

答案 0 :(得分:2)

您想要.groupby

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: df = pd.DataFrame(np.random.randint(0, 100, (13, 3)))

In [4]: df
Out[4]:
     0   1   2
0   73  85  15
1    4  56   5
2   30  74   1
3   93  16   9
4   94  97  41
5   37  49  63
6   28  66  10
7   74  35   4
8    1  76  65
9    5  79  27
10  54  33  74
11  99  54  46
12  67  28  77

简单地:

In [5]: y_km = [0, 3, 2, 1, 2, 3, 3, 3, 1, 1, 0, 1, 2]

In [6]: dfs = {k:g for k,g in df.groupby(y_km)}

现在,我已经将数据框放在dict中,但你可以做任何你想做的事情。我建议反对一堆变量,而是将某些东西放在一个容器中。注意:

In [7]: dfs[0]
Out[7]:
     0   1   2
0   73  85  15
10  54  33  74

In [8]: dfs[1]
Out[8]:
     0   1   2
3   93  16   9
8    1  76  65
9    5  79  27
11  99  54  46

In [9]: dfs[3]
Out[9]:
    0   1   2
1   4  56   5
5  37  49  63
6  28  66  10
7  74  35   4

In [10]: dfs[2]
Out[10]:
     0   1   2
2   30  74   1
4   94  97  41
12  67  28  77