Динамически создавать строку из столбца pandas

У меня есть два кадра данных, как показано ниже, один - df, а другой - аномалии: -

d = {'10028': [0], '1058': [25], '20120': [29], '20121': [22],'20122': [0], '20123': [0], '5043': [0], '5046': [0]}
    
    df = pd.DataFrame(data=d)

В основном аномалии в зеркальной копии df только в аномалиях значение будет 0 или 1, что указывает на аномалии, где значение равно 1, и неаномалии, где значение равно 0

d = {'10028': [0], '1058': [1], '20120': [1], '20121': [0],'20122': [0], '20123': [0], '5043': [0], '5046': [0]}

anomalies = pd.DataFrame(data=d)

и я конвертирую это в определенный формат с помощью следующего кода: -

details = (
            '\n' + 'Metric Name' + '\t' + 'Count' + '\t' + 'Anomaly' +
            '\n' + '10028:' + '\t' + str(df.tail(1)['10028'][0]) + '\t' + str(anomalies['10028'][0]) + 
            '\n' + '1058:' + '\t' + '\t' + str(df.tail(1)['1058'][0]) + '\t' + str(anomalies['1058'][0]) + 
            '\n' + '20120:' + '\t' + str(df.tail(1)['20120'][0]) + '\t' + str(anomalies['20120'][0]) + 
            '\n' + '20121:' + '\t' + str(round(df.tail(1)['20121'][0], 2)) + '\t' + str(anomalies['20121'][0]) + 
            '\n' + '20122:' + '\t' + str(round(df.tail(1)['20122'][0], 2)) + '\t' + str(anomalies['20122'][0]) +
            '\n' + '20123:' + '\t' + str(round(df.tail(1)['20123'][0], 3)) + '\t' + str(anomalies['20123'][0]) +
            '\n' + '5043:' + '\t' + str(round(df.tail(1)['5043'][0], 3)) + '\t' + str(anomalies['5043'][0]) +
            '\n' + '5046:' + '\t' + str(round(df.tail(1)['5046'][0], 3)) + '\t' + str(anomalies['5046'][0]) +
            '\n\n' + 'message:' + '\t' +
            'Something wrong with the platform as there is a spike in [values where anomalies == 1].'
                )

Проблема в том, что значения столбцов всегда меняются при каждом прогоне, я имею в виду, что в этом прогоне это '10028', '1058', '20120', '20121', '20122', '20123', '5043', '5046', но, возможно, в следующем прогоне это будет '10029', '1038', '20121', '20122', '20123', '5083', '5946'

Как я могу динамически создавать детали в зависимости от того, какие столбцы присутствуют во фрейме данных, поскольку я не хочу жестко кодировать, а в сообщении я хочу передать имя столбца, значение которого равно 1.

Значение столбцов всегда будет либо 1, либо 0.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
414
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это:

# first part of the string
s = '\n' + 'Metric Name' + '\t' + 'Count' + '\t' + 'Anomaly' 

# dynamically add the data
for idx, val in df.iloc[-1].iteritems():
    s += f'\n{idx}\t{val}\t{anomalies[idx][0]}' 
    # for Python 3.5 and below, use this
    # s += '\n{}\t{}\t{}'.format(idx, val, anomalies[idx][0])
    
# last part
s += ('\n\n' + 'message:' + '\t' +
      'Something wrong with the platform as there is a spike in [values where anomalies == 1].'
     )

это дает мне ошибку: - Файл "<ipython-input-152-616df6ea1447>", строка 6 s += f'\n{idx}\t{val}\t{аномалии [idx][0]}' ^ SyntaxError : неверный синтаксис, я использую Python 3, если это связано с какой-либо ошибкой

abhi 18.12.2020 17:59

формат строки f доступен в Python 3.6+. Если вы используете более раннюю версию, вам необходимо изменить ее на функцию обычного формата.

Quang Hoang 18.12.2020 18:15

Большое спасибо за ваше время!

abhi 18.12.2020 18:26

Привет @Quang, есть идеи, как я могу включить в это третий фрейм данных?

abhi 02.02.2021 05:21
stackoverflow.com/questions/66003733/…
abhi 02.02.2021 05:40

Другие вопросы по теме