Reputation: 1155
I want to print pandas-column-based concatenated strings.
To accomplish this I applied three for-loops to iterate over each element:
import pandas as pd
d = {'code': ['A180', 'A181'], 'company': ['XYZ', 'XYZ'], 'title':['vice president', 'vice president'], 'other_title':['sr vice president', 'sr vice president']}
df = pd.DataFrame(data=d)
cities = ["Buffalo", "Houston", "Boston"]
codes = df['code']
titles=df['title']
for city in cities:
for title in titles:
for code in codes:
print(code+'-'+city+'-'+title)
Which output's print code option twice:
#A180-Buffalo-vice president
#A181-Buffalo-vice president
#A180-Buffalo-vice president
#A181-Buffalo-vice president
#A180-Houston-vice president
#A181-Houston-vice president
#A180-Houston-vice president
#A181-Houston-vice president
#A180-Boston-vice president
#A181-Boston-vice president
#A180-Boston-vice president
#A181-Boston-vice president
How to get just the concatenated string once? Something like this:
#A180-Buffalo-vice president
#A181-Buffalo-vice president
#A180-Houston-vice president
#A181-Houston-vice president
#A180-Boston-vice president
#A181-Boston-vice president
Upvotes: 0
Views: 66
Reputation: 9941
But maybe you don't even need 3 loops:
from itertools import product
print('\n'.join([
x[1][0]+'-'+x[0]+'-'+x[1][1]
for x in product(cities, zip(d['code'], d['title']))]))
Output:
A180-Buffalo-vice president
A181-Buffalo-vice president
A180-Houston-vice president
A181-Houston-vice president
A180-Boston-vice president
A181-Boston-vice president
Upvotes: 2
Reputation: 34046
This is because df['title']
contains duplicates
.
Use Series.unique
to get only distinct values:
In [1446]: titles = df['title'].unique()
Then run your for
loop:
In [1448]: for city in cities:
...: for title in titles:
...: for code in codes:
...: print(code+'-'+city+'-'+title)
...:
A180-Buffalo-vice president
A181-Buffalo-vice president
A180-Houston-vice president
A181-Houston-vice president
A180-Boston-vice president
A181-Boston-vice president
Upvotes: 1