Reputation: 849
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
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