如何创建具有不同行长的多列的新python DataFrame?

时间:2018-12-12 10:27:02

标签: python pandas dataframe

我正在组织一个新的数据框,以便轻松地将数据插入Bokeh可视化代码段中。我认为我的问题是由于行长不同,但我不确定。

下面,我按照国家名称的字母顺序组织了数据集,并创建了各个国家的字母列表。 new_data.tail()尽管津巴布韦排在最后,但仍有80336行,因此排序。

    df_ind_data = pd.DataFrame(ind_data)
    new_data = df_ind_data.sort_values(by=['country'])
    new_data = new_data.reset_index(drop=True)
    country_list = list(ind_data['country'])
    new_country_set = sorted(set(country_list))

我的目标是创建一个新的DataFrame,具有76列(国家/地区名称),并在每个国家/地区列下方的行中包含特定的'trust'数据。

df = pd.DataFrame()
for country in new_country_set:
    pink = new_data.loc[(new_data['country'] == country)]
    df[country] = pink.trust

Output here

如您所见,第一列之后的其余列未包含数据。我相信这是由于每个国家的“信任”数据的行数不同而造成的。虽然第一列有1000行,但有些行有多达2500个数据点,而只有500行。

我尝试了几种不同的方法来指定'df'中的行数,但无济于事。

我使用的可视化代码段将相同的数据结构用于模板数据,因此这就是为什么我尝试将其放入数据框的原因。此外,我无法做到这一点,所以我想知道如何去做。

是的,我可以将其放入字典中,但我想将其放入数据框中。

2 个答案:

答案 0 :(得分:0)

添加新列时,应使用 combine_first ,以便扩展数据框索引。代替

df[country] = pink.trust

您应该使用

df = pink.trust.combine_first(df)

这可确保您的索引始终是所有添加列的并集。

答案 1 :(得分:0)

我认为在这种情况下pd.pivot(columns = 'var', values = 'val')会为您工作,尤其是当您已经有数据框时。此函数会将值从特定列传输到列名。您可以查看文档以获取更多信息。希望对您有所帮助。