Dataframe / Row Indexing для панд - PullRequest
0 голосов
/ 26 мая 2018

Мне было интересно, как я могу индексировать наборы данных, чтобы номер строки из df1 мог совпадать с другим номером строки для df2?например.строка 1 в df 1 = строка 3 в df2

Что бы я хотел.(В данном случае: строка 1 2011 = строка 2 2016)

строка 49:50 2011 b1 совпадает со строкой 51:52 bt 2016 (оба - один и тот же товар, но разные значения в разные годы) но нарезается по-разному из-за нахождения в другой ячейке в 2016 году

Я использовал pd.concat и pd.Series, но все еще безуспешно.

# slicing 2011 data (total)
b1 = df1.iloc[49:50, 6:7]         
m1 = df1.iloc[127:128, 6:7]   
a1 = df1.iloc[84:85, 6:7]  

data2011 = pd.concat([b1, m1, a1])

# slicing 2016 data (total)
bt = df2.iloc[51:52, 6:7]        
mt = df2.iloc[129:130, 6:7]   
at = df2.iloc[86:87, 6:7]     

data2016 = pd.concat([bt, mt, at])

data20112016 = pd.concat([data2011, data2016])

print(data20112016)

Вывод ЯПолучение:

Что мне нужно исправить.(В этом случае: строка 49 = строка 51, поэтому 11849 в левом столбце и 13500 в правом столбце)

49                     11849
127                    22622
84                     13658
51                     13500
129                    25281
86                     18594

Я бы хотел сделать гистограмму, сравнивая b12011 с bt2016 и т. Д.на.значение 42 = 51, 127 = 129 и т. д.

#           Tot_x  Tot_y
# 49=51     11849  13500
# 127=129   22622  25281
# 84=86     13658  18594

Надеюсь, все прояснится.

Заранее спасибо.

1 Ответ

0 голосов
/ 26 мая 2018

Если я правильно понял ваш вопрос, вот решение, используя merge:

df1 = pd.DataFrame([9337, 2953, 8184], index=[49, 127, 84], columns=['Tot'])
df2 = pd.DataFrame([13500, 25281, 18594], index=[51, 129, 86], columns=['Tot'])

total_df = (df1.reset_index()
               .merge(df2.reset_index(), left_index=True, right_index=True))

А вот, используя concat:

total_df = pd.concat([df1.reset_index(), df2.reset_index()], axis=1)

И вот результирующий барплот:

total_df.index = total_df['index_x'].astype(str) + '=' + total_df['index_y'].astype(str)
total_df
#          index_x  Tot_x  index_y  Tot_y
#   49=51       49   9337       51  13500
# 127=129      127   2953      129  25281
#   84=86       84   8184       86  18594

(total_df.drop(['index_x', 'index_y'], axis=1)
         .plot(kind='bar', rot=0))

enter image description here

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