首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用python将数据从长格式移到宽格式

用python将数据从长格式移到宽格式
EN

Stack Overflow用户
提问于 2021-12-26 06:00:03
回答 1查看 82关注 0票数 0

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

代码语言:javascript
运行
复制
for x in df.itertuples():
    for y in df.itertuples():
        if x.MDS==y.MDS:

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

代码语言:javascript
运行
复制
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}})

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

代码语言:javascript
运行
复制
 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到a匹配,因为我不希望行0与行0匹配并记录在新列中。如果没有找到匹配,我希望有一个空白或没有观察,如果在MDS列下有3个匹配的观察,我希望它们也以宽格式附加,在match2名称下,等等。运行时不是一个问题,因为数据集相对较小,低于10,000,所以我可以使用嵌套循环,但我真的坚持要移动数据。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-26 07:23:50

我想这就是你要找的东西。

代码语言:javascript
运行
复制
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)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70484514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档