Reputation: 13
I'm struggling on concatenations of content of two rows into the last of these two rows.
Here my situation:
A | B | C | D |
---|---|---|---|
NaN | NaN | Rossi | Brambilla |
Federico | Giovanni | Giorgio | Marcello |
I would like something like
A | B | C | D |
---|---|---|---|
NaN | NaN | Rossi | Brambilla |
Federico | Giovanni | Rossi Giorgio | Brambilla Marcello |
Could you please help me to reach this result?
Thanks in advance!
I tried the following:
df.iloc[1] = df_bo.iloc[0] + " " + df_bo.iloc[1]
but it gives me the following
IndexError: single positional indexer is out-of-bounds
I tried to transpose DF too, but it's seems to be a bit sophisticated.
Upvotes: 1
Views: 104
Reputation: 765
df1.loc[1,["C","D"]]=df1.loc[:,["C","D"]].agg(" ".join).tolist()
df1
out
A B C D
0 NaN NaN Rossi Brambilla
1 Federico Giovanni Rossi Rossi Giorgio Brambilla Brambilla Marcello
Upvotes: 0
Reputation: 654
If the original dataframe is df, this should work. :)
df2 = pd.concat([df.iloc[:1, :], pd.DataFrame(df.T[0] + ' ' + df.T[1]).T])
Upvotes: 0
Reputation: 260480
You can use stack
to get rid of the NaNs, then groupby.agg
to join the names:
df.iloc[1] = df.stack().groupby(level=1).agg(' '.join)
If you want to limit the input rows:
df.iloc[1] = df.iloc[:2].stack().groupby(level=1).agg(' '.join)
Output:
A B C D
0 NaN NaN Rossi Brambilla
1 Federico Giovanni Rossi Giorgio Brambilla Marcello
Upvotes: 1