2012-08-27 18 views
7

मेरे पास एक फ़्लैटेड फ़ाइल में इनपुट डेटा है। मैं इसे डेटा में विभाजित करके, इस डेटा को सामान्य बनाना चाहता हूं। क्या मैं pandas के साथ अच्छी तरह से कर सकता हूं - यानी, DataFrame इंस्टेंस में फ़्लैट किए गए डेटा को पढ़कर, और उसके परिणामस्वरूप DataFrame उदाहरण प्राप्त करने के लिए कुछ फ़ंक्शंस लागू कर रहे हैं?पांडा: डेटाफ्रेम को सामान्यीकृत करना

उदाहरण:

डाटा एक सीएसवी के रूप में डिस्क पर मुझे दिया है इस तरह दायर:

ItemId ItemDescription 
1  scroll of Sneak 
2  scroll of Invisibile 

और

:

ItemId ClientId PriceQuoted ItemDescription 
1  1   10   scroll of Sneak 
1  2   12   scroll of Sneak 
1  3   13   scroll of Sneak 
2  2   2500   scroll of Invisible 
2  4   2200   scroll of Invisible 

मैं दो DataFrames बनाना चाहते हैं

ItemId ClientId PriceQuoted 
1  1   10 
1  2   12 
1  3   13 
2  2   2500 
2  4   2200 

यदि pandas में सबसे सरल मामले के लिए केवल एक अच्छा समाधान है (सामान्यीकरण परिणामों के साथ-साथ एक से अधिक संबंधों के साथ 2 तालिकाओं में परिणाम - जैसा कि उपरोक्त उदाहरण में है), यह मेरी वर्तमान आवश्यकताओं के लिए पर्याप्त हो सकता है। हालांकि, मुझे भविष्य में एक और सामान्य समाधान की आवश्यकता हो सकती है।

उत्तर

9
In [30]: df = pandas.read_csv('foo1.csv', sep='[\s]{2,}') 

In [30]: df 
Out[30]: 
    ItemId ClientId PriceQuoted  ItemDescription 
0  1   1   10  scroll of Sneak 
1  1   2   12  scroll of Sneak 
2  1   3   13  scroll of Sneak 
3  2   2   2500 scroll of Invisible 
4  2   4   2200 scroll of Invisible 

In [31]: df1 = df[['ItemId', 'ItemDescription']].drop_duplicates().set_index('ItemId') 

In [32]: df1 
Out[32]: 
      ItemDescription 
ItemId 
1   scroll of Sneak 
2  scroll of Invisible 

In [33]: df2 = df[['ItemId', 'ClientId', 'PriceQuoted']] 

In [34]: df2 
Out[34]: 
    ItemId ClientId PriceQuoted 
0  1   1   10 
1  1   2   12 
2  1   3   13 
3  2   2   2500 
4  2   4   2200 
संबंधित मुद्दे