熊猫将以字符开头的多列折叠为行/列

时间:2019-10-17 13:32:03

标签: python-3.x pandas

我最近将深度嵌套的字典列表展平为一个数据框:int main() { int val1 = 0; cout << "Enter the integers (enter '|' to terminate input): "; vector<int> elements = {}; while (cin >> val1) { elements.push_back(val1); } cout << "Enter the number to find the sum of integers: "; int val2; cin >> val2; int sum = 0; for (int i = 0; i < val2; ++i) { sum = sum + elements[i]; cout << "The sum of first " << val2 << " elements is " << sum << endl; } system("pause"); return 0; } 。我有超过1500多个列,我试图找到一种聪明的方法以干净的方式将它们折叠成行和列。这是我的样本(更容易),我的真实数据更难。我只是想开始了解是否有解决方案。我无法仅解决这两栏。

列名以1x,2x,... 1500 + x开头。 我只有一排。 这是我的DataFrame:

[{},{{}},..,{}]

我正在尝试获得这样的输出:可能吗?

0_FileName  1_FileName  2_FileName  3_FileName  0_Year  1_Year  2_Year  3_Year
abc.pdf     def.txt     abc.ppt     def.pdf     2016    2016    2017    2018

我的尝试:

FileName,Year
abc.pdf,2016
def.txt,2016
abc.ppt,2017
def.pdf,2018

大熊猫中是否存在可以解决这些问题的功能?由于展平,我的数据框形状为(1500+列,1行)。非常感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

第一个想法是用MultiIndexSeries.str.split的列中创建expand=True,然后用DataFrame.unstack重塑,最后用DataFrame.reset_index用{{ 1}}:

drop=True

或使用wide_to_long重命名df.columns = df.columns.str.split('_', expand=True) df = df.stack(0).reset_index(drop=True) print (df) FileName Year 0 abc.pdf 2016 1 def.txt 2016 2 abc.ppt 2017 3 def.pdf 2018 之后的数字:

_

答案 1 :(得分:1)

这是melt

的一种方法
s=df.melt()
s.join(s.variable.str.split('_',expand=True)).pivot(0,1,values='value')
1 FileName  Year
0               
0  abc.pdf  2016
1  def.txt  2016
2  abc.ppt  2017
3  def.pdf  2018

答案 2 :(得分:0)

我相信如果reshapeFileName的数目相等,您只需要Year

pd.DataFrame(df.values.reshape(2,-1).transpose(), columns=['FileName','Year'])

输出:

  FileName  Year
0  abc.pdf  2016
1  def.txt  2016
2  abc.ppt  2017
3  def.pdf  2018
相关问题