我的df为:
position 1164_1164.0 1164_1164.1 yes_001.0 yes_001.1 10316.0 10316.1 10349.0 10349.1 10418.0 10418.1
4414 0 1 0 0 1 0 0 0 1 1
5295 0 1 0 0 1 0 0 0 1 1
5738 0 1 0 0 1 0 0 0 1 1
5785 0 1 0 0 1 0 0 0 1 1
6392 0 1 0 0 1 0 0 0 1 1
7727 1 1 0 0 1 0 0 0 1 1
8876 1 1 0 0 1 0 0 0 1 1
9018 1 1 0 0 1 0 0 0 1 1
9208 1 1 0 0 1 0 1 0 1 1
9627 1 1 0 0 1 0 1 0 1 0
正如您在第二列中看到的,我们有由后缀.0和.1分隔的列名对
在Pandas中,我可以通过排除第一列来进行分组,通过一个表达式来捕获列名中“.”之前的列名,如下所示:
g = df.iloc[:,1:].groupby(df.columns[1:].str.extract(r'(\w+)\.', expand=False), axis=1)
我正试图对极地做同样的事情,但我所能得到的就是这么远:
g = df[:,1:].groupby(df.columns[1:])
现在,我尝试了str.extract(r'(\w+)\.'
,但它给出了一个错误:
AttributeError: 'list' object has no attribute 'str'
编辑:
我能够得出这个,但它仍然给我一个错误,当我尝试一些计算:
g = df[:,1:].groupby(pl.col("*").str.extract(r'(\w+)\.'))
当我试着:
s = g.sum()
我得到:
DuplicateError: column with name '1164_1164.0' has more than one occurrences
1条答案
按热度按时间cmssoen21#
如果你提供一个代码中的例子会很有帮助。
第一点要注意的是:
df.columns
在polars中并不特殊-它只是一个python列表。主要问题是数据的形状不适合极线。
这样做的原因是polars与类型一起工作:
可以使用
.melt
将数据整形为单列然后您可以
.groupby
一个二个一个一个
要从 “长到宽” -您可以
.pivot
将
maintain_order=True
添加到.groupby
以保持行顺序使用的 Dataframe :