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

Eri*_*sen 8 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
Run Code Online (Sandbox Code Playgroud)

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

newdf
Out[235]: 
dates           2014-02-06  passes
host1                    3    True
host2                    2    True
host3                    1   False
Run Code Online (Sandbox Code Playgroud)

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


我认为,完成输出本身就很容易,我就是这么做的

newdf = df.tail(1).T
newdf['passes'] = newdf.iloc[:, 0] > 1
Run Code Online (Sandbox Code Playgroud)

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

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

我似乎无法访问重命名rename,因此我无法在一些布尔操作中访问它assign来创建新的"通过"列.

数据:

我的玩具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')
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 10

您可以使用lambdaexpression in 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
Run Code Online (Sandbox Code Playgroud)

  • 嗯,我想你必须首先看到它才能想到它.:) (3认同)

Max*_*axU 7

你可以试试这个:

In [110]: df.tail(1).T.assign(passes=df.tail(1).values[0] > 1)
Out[110]:
dates  2014-02-06 00:00:00 passes
host1                    3   True
host2                    2   True
host3                    1  False
Run Code Online (Sandbox Code Playgroud)