1

Hi I have the following dataframe:

>df1
    code    item01  item02  item03  item04  item05
0   1111    nan nan nan nan 440
1   1111    nan nan nan 650 nan
2   1111    nan nan nan nan nan
3   1111    nan nan nan nan nan
4   1111    32  nan nan nan nan
5   1111    nan nan nan nan nan
6   1111    nan nan nan nan nan
7   1111    nan nan nan nan nan
8   1111    nan nan nan nan nan
9   1111    nan nan nan nan nan
10  1111    nan nan nan nan nan
11  2222    20  nan nan nan nan
12  2222    nan nan nan nan nan
13  2222    nan nan nan 5   nan
14  2222    nan 7   nan nan nan
15  2222    nan nan nan nan nan
16  2222    nan nan nan nan nan

How can I merge using 'code' column within the dataframe to get df2 without for loop or iterrows().

>df2
    code    item01  item02  item03  item04  item05
0   1111    32  130 nan 650 440
1   2222    20  7   nan 5   nan
1
  • There is only one non nan value per group? If yes, df.groupby('code').first() shuld working. Commented Jan 16, 2018 at 12:51

2 Answers 2

1

You can use:

If max one non value in column per group only:

df.groupby('code').first()

If possible multiple values - more general solution:

cols = df.columns.difference(['code'])
df = df.groupby('code')[cols]
       .apply(lambda x: x.apply(lambda y: pd.Series(y.dropna().values)))
print (df)
        item01  item02  item03  item04  item05
code                                          
1111 0    32.0     NaN     NaN   650.0   440.0
2222 0    20.0     7.0     NaN     5.0     NaN
Sign up to request clarification or add additional context in comments.

1 Comment

It did! Thanks, jezrael
0

You can simply use a groupby:

df1.groupby('code').max().reset_index(drop=True,inplace=True)

Be careful, if there are many values for an item with the same code, here you will keep the biggest one.

The reset_index is only used to get Output DataFrame in the same format.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.