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

2024-05-23 14:13:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

你有什么办法来满足我的需要吗


Tags: 数据列表naninesmgprotananasunnamed
1条回答
网友
1楼 · 发布于 2024-05-23 14:13:13

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

相关问题 更多 >