如何访问链接操作中无法访问其名称的列

时间:2017-03-02 23:06:49

标签: python pandas

我将在前言中说这是一个玩具示例 - 我确实有这样做的动机,因为它处于其他一些链式操作的中间。

我有一个类似

的DataFrame
df
Out[234]: 
            host1  host2  host3
dates                          
2014-02-02      1      3      4
2014-02-03      5      2      1
2014-02-04      2      5      6
2014-02-05      4      6      1
2014-02-06      3      2      1

我正在尝试生成一个由两列组成的新DataFrame,其中主机是索引 - 一列是最后一行中的值,第二列是最后一行中的值是否大于1.我的相应输出应该看起来像:

newdf
Out[235]: 
dates           2014-02-06  passes
host1                    3    True
host2                    2    True
host3                    1   False

如何使用链式操作执行此操作?

我认为完成输出本身很容易,我只是做了

newdf = df.tail(1).T
newdf['passes'] = newdf.iloc[:, 0] > 1

我正在努力使用链接操作进行操作的原因是因为只要我转换尾部,列名称就会变成类型pandas.tslib.Timestamp

df.tail(1).T
Out[236]: 
dates  2014-02-06
host1           3
host2           2
host3           1

我似乎无法使用rename访问重命名,因此我无法在assign中的某个布尔操作中访问它以创建新的“pass”列。

数据

我的玩具DataFrame可以用

生成
df = pd.DataFrame(dict(dates=pd.date_range('2014-02-02', periods=5),
                       host1=[1, 5, 2, 4, 3], 
                       host2=[3, 2, 5, 6, 2], 
                       host3=[4, 1, 6, 1, 1])).set_index('dates')

3 个答案:

答案 0 :(得分:10)

您可以在lambda中使用assign表达式,其中参数是先前链式操作的结果:

df.tail(1).T.assign(passes = lambda x: x.iloc[:,0] > 1)

#dates  2014-02-06 00:00:00 passes
#host1                    3   True
#host2                    2   True
#host3                    1  False

答案 1 :(得分:7)

你可以试试这个:

if(values == ''){
    $('#myModal').css('cursor','auto');
    $('#myModal').show();
}

答案 2 :(得分:4)

我想对Psidom解决方案发表评论而不发布新的解决方案(但由于声誉不足而无法发表评论)。这个也适用

df.tail(1).T.assign(passes = lambda x: x.gt(1))