带部分字符串的取消数据帧

不良做法

我有一个数据框(totaldf)这样的:

           ...     Hom   ...    March Plans   March Ships   April Plans   April Ships   ...

0                  CAD   ...    12              5           4             13
1                  USA   ...    7               6           2             11
2                  CAD   ...    4               9           6             14
3                  CAD   ...    13              3           9             7
...                ...   ...    ...             ...         ...           ...

一年中的所有月份。我希望它是:

           ...     Hom   ...    Month   Plans    Ships    ...

0                  CAD   ...    March    12          5             
1                  USA   ...    March    7           6             
2                  CAD   ...    March    4           9             
3                  CAD   ...    March    13          3
4                  CAD   ...    April    4           13            
5                  USA   ...    April    2           11             
6                  CAD   ...    April    6           14             
7                  CAD   ...    April    9           7
...                ...   ...    ...      ...         ...

有没有一种简单的方法可以在不拆分字符串条目的情况下执行此操作?我玩过,totaldf.unstack()但是由于有多个列,因此我不确定如何正确地为数据框重新编制索引。

亚图

鉴于docs中提到的,您可以使用pd.wide_to_long,并付出一些额外的工作来获得正确的权限stubnames

存根名称。假定宽格式变量以存根名称开头​​。

因此,有必要稍微修改列名称,以使存根名称位于每个列名称的开头:

m = df.columns.str.contains('Plans|Ships')
cols = df.columns[m].str.split(' ')
df.columns.values[m] = [w+month for month, w in cols]

print(df)
   Hom  PlansMarch  ShipsMarch  PlansApril  ShipsApril
0  CAD          12           5           4          13
1  USA           7           6           2          11
2  CAD           4           9           6          14
3  CAD          13           3           9           7

现在,您可以使用pd.wide_to_longusing ['Ships', 'Plans']as存根名称来获取所需的输出:

((pd.wide_to_long(df.reset_index(), stubnames=['Ships', 'Plans'], i = 'index', 
                j = 'Month', suffix='\w+')).reset_index(drop=True, level=0)
                .reset_index())

x  Month  Hom  Ships  Plans
0  March  CAD      5     12
1  March  USA      6      7
2  March  CAD      9      4
3  March  CAD      3     13
4  April  CAD     13      4
5  April  USA     11      2
6  April  CAD     14      6
7  April  CAD      7      9

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pandas 数据帧上的部分字符串合并

按熊猫数据帧的相同部分字符串分组

如何在Shiny(R)中将字符串输入(带空格的数字)转换为数据帧?

数据帧之间的部分字符串匹配,不会覆盖现有数据

验证数据帧字符串的哪一部分不能转换为字符串

基于部分字符串匹配,从另一数据帧填充一个数据帧列

带字符串参数的多部分表单数据的Ruby Grape编码问题

与字符串等效的数据帧“差异”

更改数据帧并执行部分字符串匹配

如何在每一行数据帧上替换字符串的特定部分?

匹配 R 中部分字符串的两个数据帧

如何在R中的数据帧中提取字符串的中间部分?

基于列之间的部分字符串匹配合并 2 个数据帧

Python如何使用部分子字符串匹配将列添加到数据帧?

根据部分字符串匹配比较两个数据帧的两列

基于多个字符串的部分匹配,在R数据帧中对行进行子集

数据帧计数中有多个部分字符串匹配

根据两个数据帧之间的部分字符串检索匹配的行

将字符串的一部分转换为数据帧的不同列

如何按部分字符串(或第一个单词)排序数据帧

MySQL选择带\的字符串-字符串是IN()的一部分

Python - 将字符串数据转换为数据帧

将数据帧的unicode数据转换为字符串

将字符串数据转换为数据帧

Python 数据作为来自数据帧的字符串

具有相似字符串部分的两个数据帧的匹配顺序保持索引和顺序

使用python检查2个数据帧之间逗号分隔列值中的部分字符串

黑名单数组火花数据帧中字符串值的一部分

加快R中的循环以消除数据帧中字符串的一部分