Как объединить / объединить эти три фрейма данных

небольшая простая программа для демонстрации:

import java.io.*;
import java.util.Scanner;

public class twovalues {

    public static void main(String args[]) {

        float a,b;
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter Values For Calculation");

        a=sc.nextFloat();
        b=sc.nextFloat();

        float c=a/b;
        System.out.printf("%.2f",c);
    }
}
1
задан jpp 13 July 2018 в 14:58
поделиться

3 ответа

Вы можете добавить столбец «Пол» перед конкатенацией.

Мы используем Категориальные данные с groupby для вычисления декартова произведения. Это также должно привести к преимуществам производительности.

df = pd.concat([df_Male.assign(gender='Male'),
                df_Female.assign(gender='Female'),
                df_Transgender.assign(gender='Transgender')])

for col in ['gender', 'continent']:
    df[col] = df[col].astype('category')

res = df.groupby(['gender', 'continent']).first().fillna(0).astype(int)

print(res)

                       avg_count_country  avg_age
gender      continent                            
Female      Africa                    60       12
            America                    0        0
            Asia                      50        7
            Europe                    70        0
Male        Africa                    65       10
            America                    0        0
            Asia                      55        5
            Europe                    75        8
Transgender Africa                    40       11
            America                   80       10
            Asia                      30        6
            Europe                     0        0
2
ответ дан jpp 17 August 2018 в 12:35
поделиться
  • 1
    как создать штабелированную гистограмму в этом фрейме данных. Ось оси оси X, Female, Transgender и Y – shaswatatripathy 13 July 2018 в 17:52
  • 2
    уже сделал . [Д0] stackoverflow.com/questions/51330527/… – shaswatatripathy 13 July 2018 в 18:02

Вы можете переиндексировать бит.

from itertools import product

# Get rid of that number in the index, not sure why you'd need it
df.index = df.index.droplevel(-1)
# Add continents to the index
df = df.set_index('continent', append=True)

# Determine product of indices
ids = list(product(df.index.get_level_values(0).unique(), df.index.get_level_values(1).unique()))

# Reindex and fill missing with 0
df = df.reindex(ids).fillna(0).reset_index(level=-1)

df теперь:

            continent  avg_count_country  avg_age
Male             Asia               55.0      5.0
Male           Africa               65.0     10.0
Male           Europe               75.0      8.0
Male          America                0.0      0.0
Female           Asia               50.0      7.0
Female         Africa               60.0     12.0
Female         Europe               70.0      0.0
Female        America                0.0      0.0
Transgender      Asia               30.0      6.0
Transgender    Africa               40.0     11.0
Transgender    Europe                0.0      0.0
Transgender   America               80.0     10.0

Если вы хотите использовать другой числовой индекс, вы можете просто сделать: df.groupby(df.index).cumcount() для номера значений в каждой группе.

1
ответ дан ALollz 17 August 2018 в 12:35
поделиться

Используя DataFrame.pivot , небольшая модификация ответа @ jpp позволяет избежать ручного манипулирования индексами:

df = pd.concat([df_Male.assign(gender='Male'),
                df_Female.assign(gender='Female'),
                df_Transgender.assign(gender='Transgender')])

df.pivot('gender', 'continent').fillna(0).stack().astype(int)

                       avg_count_country  avg_age
gender      continent
Female      Africa                    60       12
            America                    0        0
            Asia                      50        7
            Europe                    70        0
Male        Africa                    65       10
            America                    0        0
            Asia                      55        5
            Europe                    75        8
Transgender Africa                    40       11
            America                   80       10
            Asia                      30        6
            Europe                     0        0
1
ответ дан fuglede 17 August 2018 в 12:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: