python - 根据条件组合 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
解决方案
您可以尝试将这些值min
和max
与前一行一起更改NaN
为不NaN
使用.where()
。然后删除同时具有min
和max
的行NaN
。然后使用每行中的值更新这些NaN
值:min
max
.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
推荐阅读
- selenium - DataTable 和 TestRunner 的黄瓜问题给出错误'java.lang.NoClassDefFoundError: io/cucumber/core/options/FeatureOptions'
- laravel-5 - 在 Laravel 5.8 中的查询中插入查询
- javascript - 如何在 Angular 应用程序中导入 npm 模块?
- python - Python for 循环操作列表并删除使用过的元素
- arrays - 将新数组返回/传递给函数(Swift 5)
- amazon-web-services - 如何实现 Amazon Connect -> AWS Kinesis Video Stream -> Lambda -> 在 S3 (Live Streaming) 中保存可听的 .wav
- java - Amazon Corretto 是否支持 JCE?
- electron - 支持电子应用程序上的 chrome 扩展
- sql - 如何连续计算一个数字序列
- python - 将包含数据框作为列表项的整个列表转换为单个数据框,Python 3.6