使用元组字典(Python Pandas)创建表

时间:2017-12-13 19:18:13

标签: python pandas dictionary dataframe

我有元组密钥的字典:

filecontents

我想创建如下表:(使用元组作为索引)

td=[((1, 1), 1), ((1, 2), 2), ((1, 3), 1) ((2, 1), 1), ((2, 2), 5), ((3, 2), 2]

如何使用python创建此表?

我尝试了pd.MultiIndex,但它没有用。

感谢。

3 个答案:

答案 0 :(得分:4)

我认为这里不需要pd.DataFrame

选项1
在致电*之前展平。您可以使用pd.DataFrame([list(x) + y for x, *y in td]) 0 1 2 0 1 1 1 1 1 2 2 2 1 3 1 3 2 1 1 4 2 2 5 5 3 2 2 参数解包 -

来概括它
pd.concat

选项2
略微更加迂回,使用df = pd.DataFrame(td) 0 1 0 (1, 1) 1 1 (1, 2) 2 2 (1, 3) 1 3 (2, 1) 1 4 (2, 2) 5 5 (3, 2) 2 pd.concat([pd.DataFrame(df.iloc[:, 0].tolist()), df.iloc[:, 1:]], axis=1) 0 1 1 0 1 1 1 1 1 2 2 2 1 3 1 3 2 1 1 4 2 2 5 5 3 2 2 -

<?php
$values="1,2,3~4,5,2~7,2,9";

$expt=explode("~",$values);

foreach ($expt as $expts)
{

$expunit=explode(",",$expts);


$bb="no";

foreach($expunit as $expunits)
{

//// $expunit[1] it´s the second value in each explode

if ($expunits==="".$expunit[1]."")
{
$bb="yes";
}

if ($bb=="yes")
{
print "$expunits --- $expunit[1] ok, value it´s the same<br>";
}
else
{
print " $expunits bad, value it´s not the same<br>";
}

}

}

?>

答案 1 :(得分:4)

我想是这样的。

pd.Series(dict(td)).reset_index()
Out[115]: 
   level_0  level_1  0
0        1        1  1
1        1        2  2
2        1        3  1
3        2        1  1
4        2        2  5
5        3        1  1
6        3        2  2

答案 2 :(得分:3)

让我们试试这个:

纠正一些数据:

td=[((1, 1), 1), ((1, 2), 2), ((1, 3), 1), ((2, 1), 1), 
    ((2, 2), 5), ((3, 2), 2), ((3, 1), 1)]

扁平元组

l = [(i[0],i[1],v) for i,v in td]
lol = [list(e) for e in l]

创建并重塑数据框

pd.DataFrame(lol).set_index([1,0]).rename_axis([None,None]).unstack()[2]\
  .fillna(0).astype(int)

输出:

   1  2  3
1  1  1  1
2  2  5  2
3  1  0  0

展开数据框:

pd.DataFrame(lol).set_index([1,0]).rename_axis([None,None]).unstack()[2]\
  .reindex(index=np.arange(1,10), columns=np.arange(1,10)).fillna(0).astype(int)

输出:

   1   2  3  4  5  6  7  8  9
1  9   0  0  0  0  0  0  0  0
2  0  10  0  0  0  0  0  0  0
3  0   1  0  1  0  0  0  0  0
4  0   0  0  1  0  0  0  0  0
5  0   0  0  0  1  1  0  0  0
6  0   0  0  0  0  1  0  0  0
7  0   0  0  0  0  0  0  0  0
8  0   0  0  0  0  0  0  0  0
9  0   0  0  0  0  0  0  0  0