首页 > 解决方案 > Pandas Dataframe 在行和列中增长

问题描述

我有以下数据框(可能在行和信息列中增长):

City    Country   Info1  Info2
BCN      Spain    3      5.6   
Moscow   Russia   4      7   

我正在尝试将信息拆分如下:

[
{Info1: 3,
 City: BCN,
 Country: Spain},

{Info2: 5.6,
 City: BCN,
 Country: Spain},

{Info1: 4,
 City: Moscow,
 Country: Russia},

{Info2: 7,
 City: Moscow,
 Country: Russia}
]

这有效:

import pandas as pd

dict = {'city':["BCN", "Moscow"], 
        'country': ["Spain", "Russia"], 
        'inf_1':[3, 5],
        'inf_2':[4,7]} 

#we make the dict a dataframe
df = pd.DataFrame(dict) 

# We make a list of the indicators
columns = list(df)[2:]
j=0
i=0


for rows in df.itertuples():
    for col in columns:
        print(" ")
        print("city: " + str(rows.city) )
        print("country: " + str(rows.country))
        print("ind_id: "+ str(columns[j]))
        print("value: "+ str(df[col][i]))
        print(" ")
        j=j+1
    j=0
    i=i+1

然而,这个结果对我来说似乎并不美好。由于我对 Pandas 很陌生,有没有办法让更优雅的代码得到相同的结果?

标签: pythonpandasdataframe

解决方案


如果您对输出中的小调整没问题,您可以使用meltandto_dict直接为每个信息获取单独的字典:

>>> df.melt(['City', 'Country']).to_dict('r')

[{'City': 'BCN', 'Country': 'Spain', 'value': 3.0, 'variable': 'Info1'},
 {'City': 'Moscow', 'Country': 'Russia', 'value': 4.0, 'variable': 'Info1'},
 {'City': 'BCN', 'Country': 'Spain', 'value': 5.6, 'variable': 'Info2'},
 {'City': 'Moscow', 'Country': 'Russia', 'value': 7.0, 'variable': 'Info2'}]

推荐阅读