在 Pandas 中合并两行(一行有值,另一行 NaN)

cgp*_*p25 6 python pandas

我知道以前曾问过类似的问题(How to merge两行在数据帧 pandas等),但我仍然在努力执行以下操作(除了具有多行的 pandas 数据帧):

    team_token  day1    day2   day3  day4
0   abc          1      NaN     NaN   NaN
1   abc          NaN     1      NaN   NaN
2   abc          NaN     NaN    NaN    NaN
3   abc          NaN     NaN    NaN     1
Run Code Online (Sandbox Code Playgroud)

我想将具有相同 team_token 的行组合起来,以便最终结果如下所示:

    team_token  day1    day2  day3  day4
0   abc           1      1    NaN     1
Run Code Online (Sandbox Code Playgroud)

先感谢您。

Vin*_*ceP 9

使用数据帧的两行给出的combine_first两个:Series

import pandas as pd
df = pd.DataFrame({'team_token':['abc', 'abc'], 'day1': [1, None], 'day2' : [None, 1]})

df.loc[0].combine_first(df.loc[1])
Run Code Online (Sandbox Code Playgroud)

给出:

 team_token  day1    day2
0   abc           1       1 
Run Code Online (Sandbox Code Playgroud)

#编辑:一个也适用于您更新的答案的更好的解决方案很简单:

df.max()
Run Code Online (Sandbox Code Playgroud)

假设您的day列包含 Nan 或 those。

如果你有不同的team_tokens

   day1  day2  day3 team_token
0   1.0   NaN   NaN        abc
1   NaN   NaN   NaN        abc
2   1.0   1.0   NaN        abc
3   NaN   NaN   NaN        abc
4   1.0   NaN   1.0        ddd
5   1.0   NaN   1.0        ddd
6   NaN   NaN   1.0        ddd
Run Code Online (Sandbox Code Playgroud)

您仍然可以group_by并且仍然采取该max组的:

df.groupby('team_token').max().reset_index()

#  team_token  day1  day2  day3
#0        abc   1.0   1.0   NaN
#1        ddd   1.0   NaN   1.0
Run Code Online (Sandbox Code Playgroud)