迭代地从pandas数据帧中的列中删除不同的可能值组合

时间:2017-05-24 20:02:04

标签: python pandas

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

    L1  L2  ouptput
0   1   6   10
1   2   7   11
2   3   3   12
3   4   5   13
4   5   6   14

产量,

       L1   L2  ouptput
    0   1   6   
    1   2   7   
    2   3   3   12
    3   4   5   13
    4   5   6   14

我想遍历数据以从上面的数据中的'output'列中删除n个值,其中n = [1,2,3,4]并将其分配给新的数据帧'Test_Data'。例如,如果我指定n = 2,则函数应该生成

Test_Data - 迭代1为

       L1   L2  ouptput
    0   1   6   10
    1   2   7   11
    2   3   3   
    3   4   5   
    4   5   6   14

Test_Data - 迭代2为

    EditText password = (EditText) findViewById(R.id.password);
    TextInputLayout passwordLayout = (TextInputLayout) findViewById(R.id.passwordLayout);

    Typeface typeface_temp = password.getTypeface();
    password.setInputType(InputType.TYPE_CLASS_TEXT |
            InputType.TYPE_TEXT_VARIATION_PASSWORD); 

    password.setTypeface(typeface_temp);
    passwordLayout.setTypeface(typeface_temp);

同样地,它应该产生一个数据帧,其中2个值从数据帧的“输出”列中删除。它应该每次产生一个新的输出(新的组合)。不应重复输出。我也应该控制迭代次数。示例5c3具有10种可能的组合。但我应该能够在8次迭代中停止它。

2 个答案:

答案 0 :(得分:0)

这不是一个很好的解决方案,但可能会帮助您实现您的目标:

import pandas as pd 
Data = pd.DataFrame({'L1': [1,2,3,4,5], 'L2': [6,7,3,5,6], 'output':[10,11,12,13,14]})
num_iterations = 1
num_values = 3
for i in range(0, num_iterations):
    tmp_data = Data.copy()
    tmp_data.loc[i*num_values:num_values*(i+1)-1, 'output'] = ''
    print tmp_data

答案 1 :(得分:0)

使用pd.concatitertools.combinations

为您提供每个组合的连续数据框
from itertools import combinations
import pandas as pd

def mask(df, col, idx):
    d = df.copy()
    d.loc[list(idx), col] = ''
    return d

n = 2
pd.concat({c: mask(Data, 'ouptput', c) for c in combinations(Data.index, n)})

       L1  L2 ouptput
0 1 0   1   6        
    1   2   7        
    2   3   3      12
    3   4   5      13
    4   5   6      14
  2 0   1   6        
    1   2   7      11
    2   3   3        
    3   4   5      13
    4   5   6      14
  3 0   1   6        
    1   2   7      11
    2   3   3      12
    3   4   5        
    4   5   6      14
  4 0   1   6        
    1   2   7      11
    2   3   3      12
    3   4   5      13
    4   5   6        
1 2 0   1   6      10
    1   2   7        
    2   3   3        
    3   4   5      13
    4   5   6      14
  3 0   1   6      10
    1   2   7        
    2   3   3      12
    3   4   5        
    4   5   6      14
  4 0   1   6      10
    1   2   7        
    2   3   3      12
    3   4   5      13
    4   5   6        
2 3 0   1   6      10
    1   2   7      11
    2   3   3        
    3   4   5        
    4   5   6      14
  4 0   1   6      10
    1   2   7      11
    2   3   3        
    3   4   5      13
    4   5   6        
3 4 0   1   6      10
    1   2   7      11
    2   3   3      12
    3   4   5        
    4   5   6