0
,我有以下數據集:如何採取多行並轉換其中的一些成列
QuestionID RowID ColID MenuID SourceRowID SourceColumnID SourceVariationID ResponseCount
---------- ---------- ---------- ------ ----------- -------------- ----------------- -------------
316923119 3029903189 3029903193 0 3029903177 3029903181 0 773
316923119 3029903189 3029903193 0 3029903177 3029903182 0 788
316923119 3029903189 3029903193 0 3029903177 3029903183 0 778
316923119 3029903189 3029903193 0 3029903177 3029903184 0 803
316923119 3029903189 3029903194 0 3029903177 3029903181 0 766
316923119 3029903189 3029903194 0 3029903177 3029903182 0 799
316923119 3029903189 3029903194 0 3029903177 3029903183 0 782
316923119 3029903189 3029903194 0 3029903177 3029903184 0 773
我想將其轉換爲數據集:
QuestionID RowID ColumnID MenuID 3029903181 3029903182 3029903183 3029903184 ResponseCount
---------- ---------- ---------- ------ ------- ------- ------- ------- -------------
316923119 3029903189 3029903193 0 773 788 778 803 3142
316923119 3029903189 3029903194 0 766 799 782 773 3120
這些被表示爲這在Python:
[
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903193,
'SourceColumnID': 3029903181,
'ResponseCount': 773
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903193,
'SourceColumnID': 3029903182,
'ResponseCount': 788
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903193,
'SourceColumnID': 3029903183,
'ResponseCount': 778
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903193,
'SourceColumnID': 3029903184,
'ResponseCount': 803
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903194,
'SourceColumnID': 3029903181,
'ResponseCount': 766
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903194,
'SourceColumnID': 3029903182,
'ResponseCount': 799
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903194,
'SourceColumnID': 3029903183,
'ResponseCount': 782
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903194,
'SourceColumnID': 3029903184,
'ResponseCount': 773
},
]
,我想:
[
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903193,
'3029903181': 773,
'3029903182': 788,
'3029903183': 778,
'3029903184': 803,
'ResponseCount': 3142
},
{
'QuestionID': 316923119,
'RowID': 3029903189,
'ColID': 3029903194,
'3029903181': 766,
'3029903182': 799,
'3029903183': 782,
'3029903184': 773,
'ResponseCount': 3120
},
]
這裏的重大變化是將行SourceColumnID合併到由相同的QuestionID,RowID和ColID分組的列中,然後將它們全部組合到新的列ResponseCount中。
我寧願將這些數據加載到熊貓中,並用DataFrame進行轉換,但任何建議都是值得歡迎的。
編輯
從TomAugspurger答案几乎以下工作:
In [90]: df
Out[90]:
ColID QuestionID ResponseCount RowID SourceColumnID
0 3029903193 316923119 773 3029903189 3029903181
1 3029903193 316923119 788 3029903189 3029903182
2 3029903193 316923119 778 3029903189 3029903183
3 3029903193 316923119 803 3029903189 3029903184
4 3029903194 316923119 766 3029903189 3029903181
5 3029903194 316923119 799 3029903189 3029903182
6 3029903194 316923119 782 3029903189 3029903183
7 3029903194 316923119 773 3029903189 3029903184
[8 rows x 5 columns]
In [91]: counts = df.pivot_table(values='ResponseCount', rows=['ColID', 'QuestionID', 'RowID'], cols='SourceColumnID', aggfunc='sum')
In [92]: counts['ResponseCount'] = counts.sum(1)
In [93]: counts
Out[93]:
SourceColumnID 3029903181 3029903182 3029903183 3029903184 ResponseCount
ColID QuestionID RowID
3029903193 316923119 3029903189 773 788 778 803 3142
3029903194 316923119 3029903189 766 799 782 773 3120
[2 rows x 5 columns]
但是,這並不讓我訪問我的需要,我應該能夠抓住數和訪問數據的方式在新的列在得到他們的罪狀:
counts[0][3029903181]
應該返回773
發現這個工作:
int(counts.iloc[0][3029903181])
這幾乎工作如何我需要它,所以我需要它被表示,以便我可以像二次字典訪問它,所以如果我確實計數[0] ['3029903181']我會得到773 – sontek
哎呀忘了關於那個部分。很高興你想出來了。 – TomAugspurger