python - 根据列数重构 pandas 数据框

标签 python pandas dataframe pivot-table

我有以下 pandas 数据框。

ID   Col1   Col2   Col3   Col4   Col5   Col6   Col7   Col8   Col9
1     A      B       C      A     B      C      A      B      C
2     D      E       F      D     E      F      D      E      F 

我想通过重组每三列的值来得到下表。

ID   Col_1   Col_2   Col_3
1      A       B       C
       A       B       C
       A       B       C

2      D       E       F
       D       E       F
       D       E       F

或者

ID   Col_1   Col_2   Col_3
1      A       B       C
1      A       B       C
1      A       B       C
2      D       E       F
2      D       E       F
2      D       E       F

有什么有效的方法吗?我尝试在 StackOverflow 社区找到类似的示例,但没有找到。有的话可以指点我一下。

感谢任何帮助!

最佳答案

您可以使用DataFrame.stack具有由整数和模除法创建的所有不带 IDMultiIndex 列:

df = df.set_index('ID')
c = np.arange(len(df.columns))
df.columns = [c // 3, c % 3]
df1 = (df.stack()
         .reset_index(level=1, drop=True)
         .rename(columns= lambda x: f'Col_{x+1}')
         .reset_index())
print (df1)
   ID Col_1 Col_2 Col_3
0   1     A     A     A
1   1     B     B     B
2   1     C     C     C
3   2     D     D     D
4   2     E     E     E
5   2     F     F     F

关于python - 根据列数重构 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60527174/

相关文章:

python - 从 SWIG 包装的 C++ 函数中获取当前的 Python 调用堆栈

python - 如果满足不同行中的条件,则替换数据框中的字符串

python - 将具有两列的 pandas DataFrame 转换为堆叠条形图

python - 使用字典替换pandas数据框中的字符串而不覆盖

python - Pandas:如何交换行的单元格值,以便它们按字母顺序排列

java - Spark DataFrame 和 HiveSQL - 删除列不起作用?

python - 导入多个Excel文件并合并到单个pandas df中,源名称为列

python - matplotlib 图例中的下划线文本

python - 当 dict 中的值是一个列表时,如何对 dict 进行这样的分割?

python - Pandas:如何根据特定行值将值应用于一组行?