我最近将深度嵌套的字典列表展平为一个数据框: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行)。非常感谢您的帮助!
答案 0 :(得分:2)
第一个想法是用MultiIndex
在Series.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)
我相信如果reshape
和FileName
的数目相等,您只需要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