как определенным образом создать фрейм данных pandas

#python #python-3.x #pandas #dataframe

Вопрос:

текущий фрейм данных

введите описание изображения здесь

желаемый формат введите описание изображения здесь

есть ли какой-либо возможный способ преобразовать фрейм данных python Pandas во 2-е упоминание изображения. то, что я пытаюсь сделать, — это взять столбец страны и сгруппировать по значениям продажи и покупки и создать новые два столбца на основе страны.

 a=[('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('uk', 'Balaji B',Decimal('48998'), Decimal('41843')),('india', 'Balaji B',Decimal('48998'), Decimal('41843')),('india', 'Balaji B',Decimal('48998'), Decimal('41843')),('india', 'Balaji B',Decimal('48998'), Decimal('41843')),('india', 'Balaji B',Decimal('48998'), Decimal('41843')),('usa', 'Balaji B',Decimal('48998'), Decimal('41843')),('usa', 'Balaji B',Decimal('48998'), Decimal('41843'))]
pd.DataFrame(a)
 

Комментарии:

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

2. @not_speshal добавил DF

3. Ошибка имени: имя «Десятичное» не определено

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

Ответ №1:

Попробуйте с pivot_table :

 output = df.pivot_table(["sale", "buy"], "users", "country") 
           .swaplevel(axis=1) 
           .sort_values("country", axis=1)           

>>> output

country       india               ...         usa             
                buy         sale  ...         buy         sale
users                             ...                         
abc      22724826.0  133418510.0  ...         NaN          NaN
as       34036460.0  538978781.0  ...         NaN          NaN
ghi       8412213.0   44774045.0  ...         NaN          NaN
gth       2449408.0    5797027.0  ...         NaN          NaN
oiuy     23618387.0  188875085.0  ...         NaN          NaN
qwe      16142525.0   30675496.0  ...   1603671.0    1603671.0
qwer            NaN          NaN  ...  33201345.0   66810216.0
reww            NaN          NaN  ... -10309654.0  415017600.0
sad             NaN          NaN  ...         NaN          NaN
yu        3191686.0   18612977.0  ...         NaN          NaN
 
Вход df:
    country   users         sale         buy
0    india     abc  133418510.0  22724826.0
1    india     def          NaN         NaN
2    india     ghi   44774045.0   8412213.0
3    india     hil          NaN         NaN
4    india      as  538978781.0  34036460.0
5    india     gth    5797027.0   2449408.0
6    india    oiuy  188875085.0  23618387.0
7    india      yu   18612977.0   3191686.0
8    india     qwe   30675496.0  16142525.0
9      usa    qwer   66810216.0  33201345.0
10     usa     qwe          NaN         NaN
11     usa     qwe    1603671.0   1603671.0
12     usa    reww  415017600.0 -10309654.0
13      uk     sad  142834632.0  20545881.0
14      uk  asdasd          NaN         NaN
 

Комментарии:

1. выглядит многообещающе, спасибо вам большое, попробую.

2. Пожалуйста, обратите внимание, что это НЕ соответствует опубликованным вами выводам. Потому что вы поместили значения для США и Великобритании в столбцы Индия и получили совершенно новые значения в столбцах США и Великобритания, которых не было в ваших входных данных.

3. да, это просто пустышки, у меня целых 26 столбцов, которые я пробовал, excel генерирует нормально.

4. можете ли вы сказать мне, хочу ли я сохранить порядок, как я могу это сделать? в каком-то сценарии мой порядок столбцов портится