【问题标题】:moving data from long to wide format in python在python中将数据从长格式移动到宽格式
【发布时间】:2022-01-25 18:30:29
【问题描述】:

我正在尝试创建一个函数来遍历数据框中的每一行以查找匹配项,然后将这些匹配项附加到同一行中,将数据从长格式更改为宽格式。 df.pivot 没有成功,这是我的直觉,所以我需要尝试其他方法。

for x in df.itertuples():
    for y in df.itertuples():
        if x.MDS==y.MDS:

这是我用于识别所有匹配项的嵌套 for 循环

pd.Dataframe=({'MDS': {106: 2, 107: 10, 108: 100, 109: 500, 110: 2}, 'LSR': {106: '3-4', 107: '3-4', 108: '3-4', 109: '3-4', 110: '3-6'}, 'Small State Wins': {106: 4150, 107: 5210, 108: 5405, 109: 5625, 110: 3893}})

这是我的示例数据框,或者只是它的快照。我想在 MDS 列中找到匹配项,当有匹配项时,将该观察结果放入与原始匹配项对应的新列中。

 MDS    LSR    Small State Wins    Match1MDS    Match1LSR    Match1Small State Wins
   2    3-4    4150                2            3-6          4150
  10    3-4    5210                NaN          NaN          NaN
 100    3-4    5405                NaN          NaN          NaN
 500    3-4    5625                NaN          NaN          NaN
   2    3-6    3893                2            3-4          3893

像这样的一些数据框是我想要的结果。我宁愿忽略 a-to-a 匹配,因为我不希望第 0 行与第 0 行匹配并记录在新列中。如果没有找到匹配项,我希望有一个空白或没有观察结果另外,如果在 MDS 列下有 3 个观察结果匹配,我也希望将它们以宽格式附加在 match2 名称下,等等对所有匹配 n。运行时不是问题,因为数据集相对较小,不到 10,000,因此我可以使用嵌套循环,但我真的被困在移动数据上。

谢谢!

【问题讨论】:

  • 长宽格式是什么意思?您只是想转置表格吗?
  • @Barmar 我研究了转置表格,但这并不是我想要的。我需要按原样保留原始行,转置只是翻转它们。长格式是行中的所有观察,宽格式是列格式的所有观察。我明白你的问题是什么意思,但基本上我需要的输出是我最后创建的数据框

标签: python pandas


【解决方案1】:

我认为这可以满足您的需求。

df['group_count'] = df.groupby(
    'MDS',
    group_keys=False,
)['MDS'].expanding().count().reset_index(
    level=0,
    drop=True,
)

df = df.set_index(['MDS', 'group_count']).unstack()
df.columns = df.columns.swaplevel(0, 1)
df = df.sort_index(axis=1)

【讨论】:

  • 更新了评论。当您通过 .groupby 时,它会创建一个 Multindex,因此当您在最后调用 ['MDS'] 时找不到它。关于如何恢复它的任何建议?
  • 我使用df = pd.Dataframe({'MDS': {106: 2, 107: 10, 108: 100, 109: 500, 110: 2}, 'LSR': {106: '3-4', 107: '3-4', 108: '3-4', 109: '3-4', 110: '3-6'}, 'Small State Wins': {106: 4150, 107: 5210, 108: 5405, 109: 5625, 110: 3893}}) 创建的数据框进行了测试。如果它在该数据帧上对您不起作用,则可能是熊猫版本之间的行为发生了变化。我的版本是1.1.3
  • 我认为这是熊猫版本之间的变化。我已经更新它以使用最新版本的熊猫。有点难看,但它似乎工作。
猜你喜欢
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
相关资源
最近更新 更多