【问题标题】:Pandas: Create a new column that alternate between values in two other columns [duplicate]Pandas:创建一个新列,在其他两列中的值之间交替[重复]
【发布时间】:2021-06-28 15:07:25
【问题描述】:

如何转换具有 S(开始)、E(结束)、V(值)列的 Dataframe

S E V 
1 2 3
2 5 11
5 11 5

并将其转换为:

T V
1 3
2 3
2 11
5 11
5 5
11 5

?

这样我们就可以用 V(y 轴)值在整个区间内相同的方式绘制数据。

编辑:

有些人认为这与“我如何使用melt()?”相同。问题。但是结果的顺序很重要。

【问题讨论】:

  • df.melt(id_vars='V', value_name='T')[['T', 'V']]
  • melt 的问题在于顺序很重要。要使用融化,我似乎需要首先从索引中创建一个列,以便在融化后按行 ID 使用。似乎@Nk03 更好,因为有了融化,我似乎无论如何都不得不处理索引。

标签: pandas


【解决方案1】:

或者使用 set_index/stack:

df = df.set_index('V').stack().reset_index(-1, drop =True).reset_index(name = 'T')

输出:

    V   T
0   3   1
1   3   2
2  11   2
3  11   5
4   5   5
5   5  11

【讨论】:

    【解决方案2】:

    试试melt

    df.melt('V')
    Out[39]: 
        V variable  value
    0   3        S      1
    1  11        S      2
    2   5        S      5
    3   3        E      2
    4  11        E      5
    5   5        E     11
    

    【讨论】:

    • 结果的顺序很重要。我能做的最好的就是使用 melt : df.rename_axis('ix').reset_index().melt(['V','ix'], value_name='T').sort_values(['ix','变量'], 升序=[True, False])
    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 2020-06-02
    • 2020-09-10
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多