【问题标题】:pandas convert some column values to rows熊猫将一些列值转换为行
【发布时间】:2020-12-07 15:06:00
【问题描述】:

我有一个看起来像这样的 Pandas DataFrame df

我希望它们以这种格式出现:

丢失 SignalName 列。我需要这种格式,因为我必须绘制时间与 SDLx 值。我认为它需要某种迭代器,我尝试过 melt 但没有奏效。

【问题讨论】:

  • 不要发布图片。请以文字形式复制粘贴。

标签: python python-3.x pandas numpy dataframe


【解决方案1】:

试试这个:

df.set_index(['time','SignalName'])['value'].unstack()

输出:

SignalName  APID1  SLID1  SPID1
time                           
t_1             1      0      2
t_2            11      0     22
t_3             1      0     20

另一种选择:

df_out = df.set_index(['time','SignalName']).unstack()
df_out.columns = [f'{j}{i}' for i, j in df_out.columns]
df_out.reset_index()

输出:

  time  APID1value  SLID1value  SPID1value
0  t_1           1           0           2
1  t_2          11           0          22
2  t_3           1           0          20

重复值,你需要以某种方式聚合时间,这里我选择第一个值,你可以做 sum、mean、max、min 或任何你选择的聚合。

df.groupby(['time', 'SignalName'])['value'].agg('first').unstack()

输出:

SignalName  APID1  SLID1  SPID1
time                           
t_1             1      0      2
t_2            11      0     22
t_3             1      0     20

【讨论】:

  • 我收到错误索引包含重复条目,无法重塑。我认为我不得不提到的整个数据集中都有 NaN。
  • 谢谢,我只需要将时间索引保存到一个列表中并对其进行排序,实际上我的数据集对于每个序列都有 t_1200。
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 2019-05-22
  • 2022-12-18
  • 2017-04-08
  • 2020-03-23
  • 2022-08-16
  • 2021-10-20
相关资源
最近更新 更多