Используйте фреймы данных для заполнения другого фрейма данных - PullRequest
0 голосов
/ 06 августа 2020

У меня есть список из 76 фреймов данных, вот один:

    Unnamed: 0            0          1
0            0   Nutriments  Quantités
1            1    Protéines      0.4 g
2            2      Lipides      0.2 g
3            3     Glucides     11.3 g
4            4          Eau       86,5
5            5       Fibres      1.2 g
6            6   Vitamine C      18 mg
7            7  Vitamine B1    0.08 mg
8            8  Vitamine B6    0.09 mg
9            9    Magnésium      15 mg
10          10    Potassium     146 mg
11          11    Phosphore      11 mg

И у меня есть другой фрейм данных:

Manganèse  Calcium  Eau  ...  Vitamine B3  Vitamine B9  Magnésium
Nom                                   ...                                     
Abricot            NaN      NaN  NaN  ...          NaN          NaN        NaN
Acérola            NaN      NaN  NaN  ...          NaN          NaN        NaN
Airelles           NaN      NaN  NaN  ...          NaN          NaN        NaN
Ananas             NaN      NaN  NaN  ...          NaN          NaN        NaN
Argousier          NaN      NaN  NaN  ...          NaN          NaN        NaN
               ...      ...  ...  ...          ...          ...        ...
Rhubarbe           NaN      NaN  NaN  ...          NaN          NaN        NaN
Roquette           NaN      NaN  NaN  ...          NaN          NaN        NaN
Tomate             NaN      NaN  NaN  ...          NaN          NaN        NaN
Topinambour        NaN      NaN  NaN  ...          NaN          NaN        NaN
Yuzu               NaN      NaN  NaN  ...          NaN          NaN        NaN

Мой список фреймов данных - это список овощей и фрукты. Например, фрейм данных «Ананас» (Ananas по-французски) должен заполнять общий фрейм данных.

Мне нужен результат вроде:

Manganèse  Calcium  Eau  ...  Vitamine B3  Vitamine B9  Magnésium
Nom                                   ...                                     
Abricot            NaN      NaN  NaN  ...          NaN          NaN        NaN
Acérola            NaN      NaN  NaN  ...          NaN          NaN        NaN
Airelles           NaN      NaN  NaN  ...          NaN          NaN        NaN
Ananas             86,5     NaN  ...               NaN          15         NaN
Argousier          NaN      NaN  NaN  ...          NaN          NaN        NaN
               ...      ...  ...  ...          ...          ...        ...
Rhubarbe           NaN      NaN  NaN  ...          NaN          NaN        NaN
Roquette           NaN      NaN  NaN  ...          NaN          NaN        NaN
Tomate             NaN      NaN  NaN  ...          NaN          NaN        NaN
Topinambour        NaN      NaN  NaN  ...          NaN          NaN        NaN
Yuzu               NaN      NaN  NaN  ...          NaN          NaN        NaN

Итак, мне нужно заполнить общий фрейм данных соответствующие строки. Строки моего небольшого фрейма данных - это столбцы моего общего фрейма данных. И не на всех маленьких фреймах данных такое же количество «столбцов», как в общем фрейме данных.

Теперь у меня есть dict = {"apple": df1, "apricot":df2 etc}. У меня:

dicttest["Ananas"]
Out[317]: 
   Unnamed: 0           0         1
0           0         Eau    88.9 g
1           1    Glucides       9 g
2           2     Lipides    0.15 g
3           3   Protéines       1 g
4           4      Fibres       2 g
5           5  Vitamine A     91 UI
6           6  Vitamine C    240 mg
7           7     Calcium     15 mg
8           8     Energie   25 kcal
9           9     Energie  104.5 kJ

в значении «Ananas».

У вас есть решение, чтобы сделать то, что мне нужно?

1 Ответ

1 голос
/ 06 августа 2020

Вот способ сделать это, используя pd.concat и 'pivot`:

dfs = []
for k, v in dicttest.items():
    v["fruit"] = k
    dfs.append(v)
    
df = pd.concat(dfs, axis=0)
df = df[[2, 3, "fruit"]] # you may have to change the names of the columns 2 and 3, 
                         # based on the column names in your data
df.columns = ["item", "amt", "fruit"]
res = pd.pivot_table(df, index="fruit", columns="item", aggfunc=",".join)

Результат:

            amt                                                                        
item    Calcium     Eau Energie Fibres Glucides Lipides Protéines Vitamine A Vitamine C
fruit                                                                                  
ananas    15 mg  88.9 g      []    2 g      9 g  0.15 g       1 g      91 UI     240 mg
apricot   12 mg  88.9 g      []    5 g     12 g  0.12 g       3 g     100 UI     180 mg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...