首页 > 解决方案 > 根据条件组合 2 列数据框

问题描述

我创建了一个数据框

data = [['Nan', 10], [4, 'Nan'], ['Nan', 12], ['Nan', 13], [5, 'Nan'], [6, 'Nan'], [7, 'Nan'], ['Nan', 8]]
df = pd.DataFrame(data, columns = ['min', 'max'])
print(df)

我的数据集看起来像,

min    max
Nan    10
4      Max
Nan    12
Nan    13
5      Nan 
6      Nan
7      Nan
Nan    8

我想创建一个新列,它将从 min 中获取一个值,然后从 max 中获取一个值。如果有续。2个最小值/最大值(我们可以看到12和13是2个值)我只需要考虑一个值(只考虑12然后移动到选择最小值)

简而言之,新列应该有一个最小值行,然后是一个最大值行,依此类推。

输出应该是

combined
10
4
12
5
8

标签: pythonpython-3.xpandasdataframe

解决方案


您可以尝试将这些值minmax与前一行一起更改NaN为不NaN使用.where()。然后删除同时具有minmax的行NaN。然后使用每行中的值更新这些NaN值:minmax.combine_first()

df = df.replace('Nan', np.nan)

df['min'] = df['min'].where(df['min'].shift().isna())
df['max'] = df['max'].where(df['max'].shift().isna())
df = df.dropna(how='all')
df['combined'] = df['min'].combine_first(df['max'])

结果:

print(df)


   min   max  combined
0  NaN  10.0      10.0
1  4.0   NaN       4.0
2  NaN  12.0      12.0
4  5.0   NaN       5.0
7  NaN   8.0       8.0

推荐阅读