Как получить доступ к столбцу, имя которого я не могу получить доступ в цепочечных операций

Я предвосхищу это, сказав, что это игрушечный пример - у меня есть мотивы для этого, так как он находится в середине некоторых других цепных операций.

У меня есть 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 для создания нового столбца «проходов».

Данные

Моя игрушка 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')
8 голосов | спросил Eric Hansen 3 MaramFri, 03 Mar 2017 02:06:48 +03002017-03-03T02:06:48+03:0002 2017, 02:06:48

2 ответа


0

Вы можете использовать выражение 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
ответил Psidom 3 MaramFri, 03 Mar 2017 02:12:39 +03002017-03-03T02:12:39+03:0002 2017, 02:12:39
0

вы можете попробовать это:

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
ответил MaxU 3 MaramFri, 03 Mar 2017 02:16:32 +03002017-03-03T02:16:32+03:0002 2017, 02:16:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132