使用数据框填充另一个数据框

时间:2020-08-06 09:00:05

标签: python pandas dataframe

我有一个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

我的数据框列表是蔬菜和水果的列表。例如,数据框“ Pineapple”(法语中的“ 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 个答案:

答案 0 :(得分:1)

这是一种使用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