Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

looping through multiple values in a column

Can someone please advise me on how to loop through multiple values in a data frame column.

Example:

col1    col2
High street qwe.723,qwe.2,qwe.17,qwe.1000,qwe.23
Must street qwe.34,qwe.17,qwe.1000,qwe.23

I want to have the following output:

High street
qwe.723
High street
qwe.2
High street
qwe.17
High street
qwe.1000
High street
qwe.23

Must street
qwe.34
Must street
qwe.17
Must street
qwe.1000
Must street
qwe.23

My attempt:

lines = open('file.txt','r')
for line in lines:
    line=line.strip().split('\t')
    vals=line[1].split(',')
    for val in vals:
        print(line[0],'\n',val)
like image 741
user27976 Avatar asked Nov 25 '25 14:11

user27976


2 Answers

Try this:

In [136]: df
Out[136]:
          col1                                  col2
0  High street  qwe.723,qwe.2,qwe.17,qwe.1000,qwe.23
1  Must street         qwe.34,qwe.17,qwe.1000,qwe.23

In [137]: df.set_index('col1').col2.str.split(',', expand=True).stack().reset_index(level=1, drop=1).to_frame('col2').reset_index().stack()
     ...:
Out[137]:
0  col1    High street
   col2        qwe.723
1  col1    High street
   col2          qwe.2
2  col1    High street
   col2         qwe.17
3  col1    High street
   col2       qwe.1000
4  col1    High street
   col2         qwe.23
5  col1    Must street
   col2         qwe.34
6  col1    Must street
   col2         qwe.17
7  col1    Must street
   col2       qwe.1000
8  col1    Must street
   col2         qwe.23
dtype: object

I'm sure there must be a better way to do this...

like image 57
MaxU - stop WAR against UA Avatar answered Nov 28 '25 03:11

MaxU - stop WAR against UA


Another one:

(df.set_index('col1')
   .col2.str.split(',', expand=True)
   .stack()
   .reset_index(level=-1, drop=True)
   .to_csv('output.txt',sep='\n')
like image 40
Zeugma Avatar answered Nov 28 '25 03:11

Zeugma



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!