我有元组密钥的字典:
filecontents
我想创建如下表:(使用元组作为索引)
td=[((1, 1), 1), ((1, 2), 2), ((1, 3), 1) ((2, 1), 1), ((2, 2), 5), ((3, 2), 2]
如何使用python创建此表?
我尝试了pd.MultiIndex,但它没有用。
感谢。
答案 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