[英]Reshape a pandas DataFrame by stacking columns
如何使用熊猫制作类似的东西?
in:
data = {post1: [like1, like2],
post2: [like1, like2, like3, like4],
post3: [like1, like2, like3]
}
out:
post1 like1
post1 like2
post2 like1
post2 like2
post2 like3
post2 like4
post3 like1
post3 like2
post3 like3
我已经试过了这段代码,但是由于列表的长度不同,所以失败了。 我可以通过制作大量DataFrame并附加它们来做到这一点,但这非常慢。
def run():
result = {}
for link in links:
result[link] = id2screen(get_likes(link))
df = DataFrame.from_dict(result)
stacked = df.set_index(keys).stack()
stacked.to_excel(r'C:\Users\user\Desktop\out.xlsx',
index=False)
run()
orient='index'
from_dict
更能容忍不同长度的数据:
pd.DataFrame.from_dict(data, orient='index')
Out[32]:
0 1 2 3
post1 like1 like2 None None
post3 like1 like2 like3 None
post2 like1 like2 like3 like4
然而,
pd.DataFrame.from_dict(data, orient='index').stack()
给出:
Out[40]:
post1 0 like1
1 like2
post3 0 like1
1 like2
2 like3
post2 0 like1
1 like2
2 like3
3 like4
dtype: object
因此,要获得如图所示的目标输出,可以添加.reset_index(level=1, drop=True)
:
pd.DataFrame.from_dict(data, orient='index').stack().reset_index(level=1,
drop=True)
Out[34]:
post1 like1
post1 like2
post3 like1
post3 like2
post3 like3
post2 like1
post2 like2
post2 like3
post2 like4
dtype: object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.