Есть ли способ добавить черту в несколько столбцов в Пандах? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть такой фрейм данных Head of df

Я хочу иметь заголовок с именем «Совокупное среднее» над вторым, третьим и четвертым столбцом, чтобы избежать записи этого 3 раза в каждом столбце.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Я понял, что вы имеете в виду, опубликовав фиктивную ситуацию:

Рассмотрим приведенный ниже кадр данных:

df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],columns=['a','cum_a','cum_b'])
print(df)
   a  cum_a  cum_b
0  1      2      3
1  4      5      6
2  7      8      9

Мы нацелены на изменение столбцов с шаблоном, например cum_a, cum_b. Это можно сделать с помощью df.filter():

values_to_rename=['change1','change2'] #sequential list of values to replace
d=dict(zip(df.filter(like='cum').columns,values_to_rename)) #create a dict
#{'cum_a': 'change1', 'cum_b': 'change2'}

df=df.rename(columns=d)
print(df)

   a  change1  change2
0  1        2        3
1  4        5        6
2  7        8        9
1 голос
/ 29 марта 2019

Вы можете использовать Pandas MultiIndex: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html

Например, (пример просто адаптирован из документации)

col_names = [['', 'Cumulative mean', 'Cumulative mean', 'Cumulative mean'],['error', 'days', 'hour', 'minute']]
col_tuples = list(zip(*col_names))
index = pd.MultiIndex.from_tuples(col_tuples)

# use random numbers
listsForDataframe = np.array([
    np.random.normal(size=4), #list1
    np.random.normal(size=4), #list2
    np.random.normal(size=4), #list3
    np.random.normal(size=4)  #list4
])

# create the dataframe from lists like you did from the comment
# include the multiindex object
pd.DataFrame(listsForDataframe.T,columns=index)

Результат:

            Cumulative mean                    
      error            days      hour    minute
0  0.008628        0.037006 -0.805627 -1.951804
1  0.527004        0.767902 -1.118312 -0.659892
2  0.453782        0.589880 -0.131054 -1.139802
3 -1.829740       -0.363859  1.133080  0.784958

Подмножество мультиколонки «Совокупное среднее» затем дает print(d[['Cumulative mean']]):

  Cumulative mean                    
             days      hour    minute
0        0.037006 -0.805627 -1.951804
1        0.767902 -1.118312 -0.659892
2        0.589880 -0.131054 -1.139802
3       -0.363859  1.133080  0.784958
0 голосов
/ 29 марта 2019

Попробуйте сделать это, если можете

import pandas as pd
import numpy as np

df = {'col_1': [0, 1, 2, 3],
    'col_2': [4, 5, 6, 7]}
df = pd.DataFrame(df)

df[[ 'column_new_1', 'column_new_2','column_new_3']] = [np.nan, 'dogs',3]

Возможно, это решит проблему

или вы можете попробовать использовать этот пример

import pandas as pd
import numpy as np

df = pd.DataFrame({
'col_1': [0, 1, 2, 3],
'col_2': [4, 5, 6, 7]
 })

Это примерычто вы можете использовать, но, конечно, вам нужно будет добавить данные самостоятельно.

Надеюсь, это поможет создать несколько строк столбцов

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