The data frame is below.
| ID | FIRST_NAME| LAST_NAME| MOBILE_NUMBER | DIRECT_NUMBER|
| ---|-----------------------------------------------------|
| 1 | Richard | dietzen | +18708007709 | not available |
| 2 | William |macdonald | not available | +15611784776 |
| 3 | Richard | Dietzen | +18708007709 | not available |
| 4 | dale | Sowders | +16162900340 | not available |
| 5 | dale | Sowders | +18708007709 | not available |
the tuple of index of data frame:
|(1, 3)|
|(4, 5)|
expected data frame;
| ID_1 | FIRST_NAME_1 |...... | DIRECT_NUMBER_1| ID_2 | FIRST_NAME_2|......| DIRECT_NUMBER_2|
| --- |------------------------------------------------------------------------------------|
| 1 | richard | ......| not available | 3 | richard |......| not available |
| 4 | dale | ......| not available | 5 | dale |......| not available |
the output should be a data frame like above data frame, it should have the index tuple in same row of data frame
Create MultiIndex.from_tuples
by 3 levels by list comprehension first:
tups = [(1,3),(4,5),(3,4)]
#if necessary set ID to index
df = df.set_index('ID')
L = [(a,i+1, x) for a, b in enumerate(tups) for i, x in enumerate(b) ]
mux = pd.MultiIndex.from_tuples(L)
Then use DataFrame.reindex
with convert last level to column ID
and reshape by DataFrame.unstack
with sorting levels by DataFrame.sort_index
, last flatten MultiIndex
:
df = (df.reindex(mux, level=2)
.reset_index(level=-1)
.rename(columns={'level_2':'ID'})
.unstack()
.sort_index(axis=1, level=1, sort_remaining=False))
df.columns = df.columns.map(lambda x: f'{x[0]}_{x[1]}')
print (df)
ID_1 FIRST_NAME_1 LAST_NAME_1 MOBILE_NUMBER_1 DIRECT_NUMBER_1 ID_2 \
0 1 Richard dietzen +18708007709 not available 3
1 4 dale Sowders +16162900340 not available 5
2 3 Richard Dietzen +18708007709 not available 4
FIRST_NAME_2 LAST_NAME_2 MOBILE_NUMBER_2 DIRECT_NUMBER_2
0 Richard Dietzen +18708007709 not available
1 dale Sowders +18708007709 not available
2 dale Sowders +16162900340 not available
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.