Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将以字符开头的多列折叠为行/列_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 将以字符开头的多列折叠为行/列

Python 3.x 将以字符开头的多列折叠为行/列,python-3.x,pandas,Python 3.x,Pandas,我最近将深度嵌套的字典列表展平到一个数据框中:[{},{{}},…,{}]。我有超过1500多列,我正试图找到一种聪明的方法,以一种干净的方式将这些列折叠成行和列。这是我的示例(更简单),我的真实数据更难。我只是想开始看看是否有解决办法。我无法仅解这两列 列名以1x、2x、…1500+x开头。 我只有一排。 这是我的数据框: 0_FileName 1_FileName 2_FileName 3_FileName 0_Year 1_Year 2_Year 3_Year abc.pdf

我最近将深度嵌套的字典列表展平到一个数据框中:
[{},{{}},…,{}]
。我有超过1500多列,我正试图找到一种聪明的方法,以一种干净的方式将这些列折叠成行和列。这是我的示例(更简单),我的真实数据更难。我只是想开始看看是否有解决办法。我无法仅解这两列

列名以1x、2x、…1500+x开头。 我只有一排。 这是我的数据框:

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
我的尝试:

df.T # just does the transpose. thoughts of grouping it?
df['FileName'] = df['0_FileName'] + ',' + df['1_FileName'] .... # problem with this is that I have do this many many times. Then split it by ',', and explode it through pandas functionality.

熊猫是否具有解决这些问题的功能?由于扁平化,我的数据框的形状是(1500多列,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

这里有一种方法
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

第一个ide是在列中创建
多索引
,通过
扩展=真
,然后通过重塑,最后设置默认索引值通过
拖放=真

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
或与重命名一起用于
之后的数字:

df = (pd.wide_to_long(df.rename(columns=lambda x: '_'.join(x.split('_')[::-1])).reset_index(), 
                      ['FileName','Year'],
                      i='index',
                      j='value', 
                      sep='_').reset_index(drop=True))
print (df)
  FileName  Year
0  abc.pdf  2016
1  def.txt  2016
2  abc.ppt  2017
3  def.pdf  2018

第一个ide是在列中创建
多索引
,通过
扩展=真
,然后通过重塑,最后设置默认索引值通过
拖放=真

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
或与重命名一起用于
之后的数字:

df = (pd.wide_to_long(df.rename(columns=lambda x: '_'.join(x.split('_')[::-1])).reset_index(), 
                      ['FileName','Year'],
                      i='index',
                      j='value', 
                      sep='_').reset_index(drop=True))
print (df)
  FileName  Year
0  abc.pdf  2016
1  def.txt  2016
2  abc.ppt  2017
3  def.pdf  2018

如果
文件名
年份
的数量相等,我相信您只需要
重塑

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

如果
文件名
年份
的数量相等,我相信您只需要
重塑

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

列是否遵循逻辑模式?与
fileName
Year
中一样,列是否遵循逻辑模式?如
文件名
年份
?非常感谢!这对我来说是一个很好的开始。我有很多复杂的扁平结构,我将尝试使用类似的技术从您的解决方案…让我们看看如何进行。非常感谢!这对我来说是一个很好的开始。我有很多复杂的扁平结构,我将尝试使用类似的技术从您的解决方案…让我们看看如何进行。