首页 > 解决方案 > 使用 Pandas Python 格式化具有给定限制的数据表

问题描述

我正在尝试格式化数据,input.csv以便它返回满足条件的索引Indexes。我希望代码打印出所有在#intervals. 只有第一行元素[ 2. 2. 30.]满足在Indexes变量中定义的限制。本质上,我想打印出所有行: 那满足条件: if column['MxU'] >= MxU and column['SNPT'] >= SNPT..... and column['MxD'] >= MxD 。下面的代码来自我之前的帖子:post。我想接受更多参数,columns但我只能接受两个。我想让它模块化,这样我就可以接受 1 到尽可能多 intervalscolumns1-4工作。

输入.csv 文件:

element,LNPT,SNPT,NLP,NSP,TNT,TPnL,MxPnL,MnPnL,MxU,MxD
[ 2.  2. 30.],0,0,4,4,8,-0.1,-0.0,-0.1,17127,-3
[ 2.  2. 40.],0,0,2,2,4,0.0,-0.0,-0.0,17141,-3
[ 2.  2. 50.],0,0,2,2,4,0.0,-0.0,-0.0,17139,-3
[ 2.  2. 60.],2,0,6,6,12,0.5,2.3,-1.9,17015,-3
[ 2.  2. 70.],1,0,4,4,8,0.3,0.3,-0.0,17011,-3
import functools

df = pd.read_csv('STDOutputs_Q1.csv')

intervals = {
    'MxU': 17100,
    'SNPT': 1000,
    'NLP': 30,
    'MnPnL': -0.1,
    'MxD': -10
}

columns1 = ['NLP', 'MxD']
columns2 = ['NLP', 'MxD', 'MnPnL']
columns3 = ['SNPT']
columns4 = ['MxU', 'SNPT', 'NLP', 'MnPnL', 'MxD']

def masking(columns):
    mask = functools.reduce(lambda c1, c2: (df[c1] >= intervals[c1]) & (df[c2] >= intervals[c2]),
                            columns)
    df_ = df.loc[mask, 'element']

masking(columns1)
masking(columns2)
masking(columns3)
masking(columns4)

标签: pythonpandasdatabasedataframeformat

解决方案


推荐阅读