Python / Pandas: Как составить список значений столбцов на основе выбранного имени строки (шаблона)? - PullRequest
0 голосов
/ 26 января 2019

введите описание изображения здесь Как реализовать на основе имени шаблона список значений для него - см. Изображение

Скажем, я выбираю "Pattern_8_0_100_8_2". Я хочу, чтобы значения (8, 0, 100, 8, 2) в столбцах, связанных с этой строкой, были списком. Есть ли способ достичь этого в библиотеке панд?

Списки, которые я хочу создать:

Pattern_8_0_100_8_2 = ['8', '0', '100', '8', '2']

Pattern_8_0_200_16_3 = ['8', '0', '200', '16', '3']

Pattern_8_0_300_32_4 = ['8', '0', '300', '32', '4']

Pattern_8_0_400_64_5 = ['8', '0', '400', '64', '5']

Пока я могу читать файл xlxs, содержащий мои данные, и распечатывать данные в виде определенной строки (см. Изображение)

import pandas as pd

dyn_power_df = pd.read_excel(r"C:\power.xlsx")

dyn_power_df[dyn_power_df["pattern"] == "Pattern_8_0_100_8_2"]

Я полагаю, нам нужно использовать условный (if-else) оператор на основе имени шаблона, чтобы сохранить значения в столбцах, связанных с ним? Есть ли более простой способ? Пожалуйста, помогите, так как я все еще новичок в питоне / пандах. Спасибо!

1 Ответ

0 голосов
/ 27 января 2019

Сначала давайте создадим пустой DataFrame.

patterns = [
    "Pattern_8_0_100_8_2",
    "Pattern_8_0_200_16_3",
    "Pattern_8_0_300_32_4",
    "Pattern_8_0_400_64_5",
]

columns = [
    "Channel Count",
    "FEC count",
    "Input Clock Freq",
    "Data Rate",
    "Post PLL Divider",
]

df = pd.DataFrame(columns=columns, index=patterns)

Теперь мы можем перебрать DataFrame и разбить индекс на столбцы.

for index, row in df.iterrows():
    li = index.split("_")
    for c in range(5):
        df.loc[index][c] = int(li[c + 1])

Наконец, мы можем сжать индексс только что созданными столбцами из DataFrame, чтобы создать список кортежей с вашим шаблоном и затем список значений.

print(list(zip(df.index, df.values.tolist())))

В результате получается:

[('Pattern_8_0_100_8_2', [8, 0, 100, 8, 2]),
 ('Pattern_8_0_200_16_3', [8, 0, 200, 16, 3]),
 ('Pattern_8_0_300_32_4', [8, 0, 300, 32, 4]),
 ('Pattern_8_0_400_64_5', [8, 0, 400, 64, 5])]
...