dondapati
dondapati

Reputation: 849

Extract data from the column

Hi i have the dataframe , it contains 2 columns from the sencod column i want to create the 3rd column

 df1 = pd.DataFrame({'Index': [1,2,2,3,3,3,4,4,4,5], 'col2': ['False_False','ab_ba_False','ab_ba_False','bca_False_abc_False_cd','bca_False_abc_False_cd','bca_False_abc_False_cd','False_bca_False_abc_cde','False_bca_False_abc_cde','False_bca_False_abc_cde','as_False']}); df1


Input
   Index                    col2
0      1             False_False
1      2             ab_ba_False
2      2             ab_ba_False
3      3  bca_False_abc_False_cd
4      3  bca_False_abc_False_cd
5      3  bca_False_abc_False_cd
6      4  False_bca_False_abc_cde
7      4  False_bca_False_abc_cde
8      4  False_bca_False_abc_cde
9      5  as_False

IF column contains False the outout is be False oresle it take each value from the second column.

OutPut:



  Index                    col2   col3
0      1             False_False    False
1      2             ab_ba_False    ab
2      2             ab_ba_False    ba
3      3  bca_False_abc_False_cd    bca
4      3  bca_False_abc_False_cd    abc
5      3  bca_False_abc_False_cd    cd
6      4  False_bca_False_abc_cde   bca
7      4  False_bca_False_abc_cde   abc
8      4  False_bca_False_abc_cde   cde
9      5  as_False                  as

Upvotes: 1

Views: 74

Answers (1)

jezrael
jezrael

Reputation: 863791

Solution working if same values per group by column Index, so processing only first value of column per group.

First split and filter out False values and then are 3 conditions for general solution:

def f(x):
    a = [y for y in x.iat[0].split('_') if y != 'False']
    if len(x) == len(a):
        return a
    elif len(x) > len(a):
        return a + ['False'] * (len(x) - len(a))
    elif len(x) < len(a):
        return a[:len(x)]

df1['col3'] = df1.groupby('Index')['col2'].transform(f)
print (df1)
   Index                     col2   col3
0      1              False_False  False
1      2              ab_ba_False     ab
2      2              ab_ba_False     ba
3      3   bca_False_abc_False_cd    bca
4      3   bca_False_abc_False_cd    abc
5      3   bca_False_abc_False_cd     cd
6      4  False_bca_False_abc_cde    bca
7      4  False_bca_False_abc_cde    abc
8      4  False_bca_False_abc_cde    cde
9      5                 as_False     as

Upvotes: 1

Related Questions