Python: от строк к столбцам для спецификаций c Разделы в DF - PullRequest
0 голосов
/ 28 января 2020

У меня есть следующая таблица в Excel, которая выглядит следующим образом:

import pandas as pd

data = """  Col1  |  Col2  |  Col3  | Col4 
 Value11 | Value21 | Value31 |      
 stuff  | stuff  | stuff  |  2.0 
 stuff  | stuff  | stuff  |  3.0 
        |        | Total  |  5.0 
 Value12 | Value22 | Value32 |      
 stuff  | stuff  | stuff  |  6.0 
 stuff  | stuff  | stuff  |  4.0 
        |        | Total  | 10.0 """

df = pd.read_csv(pd.compat.StringIO(data), header=0, delimiter = "|")

print(df)

+---------+---------+---------+------+
|  Col1   |  Col2   |  Col3   | Col4 |
+---------+---------+---------+------+
| Value11 | Value21 | Value31 |      |
| stuff   | stuff   | stuff   |  2.0 |
| stuff   | stuff   | stuff   |  3.0 |
|         |         | Total   |  5.0 |
| Value12 | Value22 | Value32 |      |
| stuff   | stuff   | stuff   |  6.0 |
| stuff   | stuff   | stuff   |  4.0 |
|         |         | Total   | 10.0 |
+---------+---------+---------+------+

, и я хотел бы иметь такую ​​возможность для анализа данных:

+-------+-------+--------+------+----------+---------+---------+
| Col1  | Col2  |  Col3  | Col4 |   Col5   |  Col6   |  Col7   |
+-------+-------+--------+------+----------+---------+---------+
| stuff | stuff | stuff  |  2.0 | Value11  | Value21 | Value31 |
| stuff | stuff | stuff  |  3.0 | Value11  | Value21 | Value31 |
| stuff | stuff | stuff  |  6.0 | Value12  | Value22 | Value32 |
| stuff | stuff | stuff  |  4.0 | Value12  | Value22 | Value32 |
+-------+-------+--------+------+----------+---------+---------+

То есть Я хотел бы превратить Значения в каждом из Col1, Col2, Col3 в повторяющиеся строки рядом с соответствующим разделом.

Единственный шаблон, который я вижу, это то, что в Col3 есть переменная "Total" чуть выше значений, которые я хочу превратить в строки.

Любые идеи о том, как это сделать sh, это в Python

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Так что, если вы только выбираете строки и манипулируете ими, код выглядит следующим образом:

df21 = pd.concat([df.iloc[0:1], df.iloc[0:1]])
df22 = pd.concat([df.iloc[4:5], df.iloc[4:5]])

df2 = pd.concat([df21,df22])

df1 = pd.concat([df.iloc[1:3], df.iloc[5:7]])

df1.reset_index(drop=True, inplace=True)
df2.reset_index(drop=True, inplace=True)
df_f = pd.concat([df1, df2], axis=1)
0 голосов
/ 28 января 2020

Вы ищете что-то подобное?

import pandas as pd
df = pd.DataFrame(
    {"Col1": ["Value11", "stuff1", "stuff1","Value12", "stuff2", "stuff2"],
     "Col2": ["Value21", "stuff1", "stuff1","Value22", "stuff2", "stuff2"],
     "Col3": ["Value31", "stuff1", "stuff1","Value32", "stuff2", "stuff2"],
     "Col4": ["", 2, 3,"",6,4], },
    index=[1, 2, 3,4,5,6])

df1 = df.loc[df['Col1'] == 'stuff1']
df2 = df.loc[df['Col1'] == 'stuff2']

dfc = pd.concat([df1,df2])

df11 = df.loc[df['Col1'] == 'Value11']
df22 = df.loc[df['Col1'] == 'Value12']


dfc1 = pd.concat([df11, df11])
dfc2 = pd.concat([df22, df22])



df_fin1 = pd.concat([dfc1, dfc2])

print(df_fin1)
dfc.reset_index(drop=True, inplace=True)
df_fin1.reset_index(drop=True, inplace=True)
df_fin = pd.concat([dfc, df_fin1], axis=1)


print(df_fin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...