将数据框的第三列放在下一行

Posted

技术标签:

【中文标题】将数据框的第三列放在下一行【英文标题】:Put third column of dataframe in next row 【发布时间】:2019-01-15 12:15:03 【问题描述】:

我有一个包含三列的数据框:

id   no.  name
1A   32   ABC
4D   34   CFD
3B   32   DGA

我想像这样将第三列移动到连续的下一行:

1A   32
ABC
4D   34
CFD
3B   32
DGA

这在 Python 中是如何实现的?

我尝试创建两个数据框,其中一个包含“id 和 no”。和另一个“名称”,然后将它们合并。但我不喜欢它不干净的输出。

【问题讨论】:

【参考方案1】:

您可以将name 系列拆分为一个新的数据帧,并操作两个结果数据帧的索引。最后用concat组合起来。

# split out dataframe of names
df_name = df.pop('name').to_frame('id')
df_name['no.'] = ''

# manipulate indices so they are non-overlapping
df_name.index = df_name.index * 2 + 1
df.index = df.index * 2

# concatenate two dataframes
res = pd.concat([df, df_name]).sort_index()

结果:

print(res)

    id no.
0   1A  32
1  ABC    
2   4D  34
3  CFD    
4   3B  32
5  DGA    

【讨论】:

这很好,但我不希望出现任何 NaN。没有 NaN 有可能吗? 这是可能的(见更新),但不建议您现在有一系列混合类型(整数和空字符串)。 我是否需要先创建空数据框,因为它的给定 df 没有定义? df 是您的输入数据框,如您的问题所示。这是我的逻辑的唯一输入。其他一切都是派生的。

以上是关于将数据框的第三列放在下一行的主要内容,如果未能解决你的问题,请参考以下文章

在 csv 文件的第三列中将秒数转换为年龄

基于sql中的第三列返回两列的所有组合

Pandas 根据非恒定值的第三列将值从一列复制到另一列

如何把WinForms中DataGrid的第一列放上复选框,可以多项选择???急!

如何获取脚本以将 2 个变量的总和添加到表格中的第三列

如何使用AWK将包含特定字符串的行之后的行的第三列中的值打印到不同的文件?