自我加入Pandas:使用等效的多索引合并所有行

时间:2014-04-19 13:05:06

标签: python-2.7 pandas self-join

我有一个以下形式的数据框:

df = pd.read_csv('data/original.csv', sep = ',',  names=["Date", "Gran", "Country", "Region", "Commodity", "Type", "Price"], header=0)

我试图在索引Date,Gran,Country,Region上进行自我联接,以生成以下形式生成行 日期,格兰,国家,地区,商品X,TypeX,价格X,商品Y,类型Y,Prixe Y,商品Z,Z型,价格Z

每一行都应该具有特定区域的所有不同商品和价格。

有一种简单的方法吗?

非常感谢任何帮助!


注意:我通过忽略一些属性来简化示例

输入示例:

      Date         Country  Region            Commodity  Price
1     03/01/2014   India  Vishakhapatnam      Rice       25
2     03/01/2014   India  Vishakhapatnam      Tomato     30
3     03/01/2014   India  Vishakhapatnam      Oil        50
4     03/01/2014   India  Delhi               Wheat      10   
5     03/01/2014   India  Delhi               Jowar      60   
6     03/01/2014   India  Delhi               Bajra      10   

输出示例:

      Date         Country  Region            Commodit1 Price1 Commodity2 Price2 Commodity3 Price3
1     03/01/2014   India  Vishakhapatnam      Rice       25     Tomato    30     Oil        50
2     03/01/2014   India  Delhi               Wheat      10     Jowar     60     Bajra      10

1 个答案:

答案 0 :(得分:1)

您想要做的事情称为重塑(具体而言,从长到宽)。有关详细信息,请参阅this answer

不幸的是,据我所知,大熊猫没有一种简单的方法可以做到这一点。我在另一个帖子中为你的问题调整了答案:

df['idx'] = df.groupby(['Date','Country','Region']).cumcount()
df.pivot(index= ['Date','Country','Region'], columns='idx')[['Commodity','Price']]

这能解决您的问题吗?