基于具有序列的列条目转置数据框

问题描述 投票:0回答:2

现在我有一个包含两列的数据框:

columnA   columnB
:16R:AB     NaN
:20C::XX    S400500
:16X:AB     NaN
:16R:AC     NaN
:16X:AC     NaN
:16R:AB     NaN
:31X::BB    Sema
:16R:AB     Nan

我想根据某些序列转置数据帧。

:16R:AB
到下一个
16X:AB
是一个序列,然后从
16R:AC
16X:AC
等等。然后我还想添加一个计数器/ID,以便最终数据框看起来像:

Index/Counter :16R:AB :20C::XX :16X:AB :16R:AC :16X:AC :31X:BB
1                 NaN S400500   NaN     NaN    NaN      Nan
2               NaN    NaN       NaN     NaN   NaN      NaN
3               NaN     NaN       NaN    NaN    NaN      Sema

有什么技巧可以做到吗?或者是曼纽尔循环?

python pandas
2个回答
2
投票

因此重建示例的原型: D = pd.DataFrame([np.random.randint(1,5,20), np.random.randn(20)]).T D.columns = ["键", "值"]

键值

4.0 1.017081

4.0 -1.480929

3.0 -1.257809

1.0 -0.683207

...

现在我们可以添加一个字段,用于计算相同键的出现次数

D["occurance"] = (D.key == 4.0).cumsum()

...然后我们就可以旋转:

D.pivot(index="occurance", columns="key", values=["value"] )

0
投票
def function1(dd: pd.DataFrame):
    return dd.set_index('columnA').rename(columns={'columnB':dd.name}).reindex(dd1.index).T

dd1=df1.drop_duplicates().set_index("columnA").rename_axis('Index/Counter')
df1.drop_duplicates().groupby([1, 1, 1, 2, 2, 3, 3], as_index=0, group_keys=0).apply(function1)



Index/Counter :16R:AB :20C::XX :16X:AB :16R:AC :16X:AC :31X::BB :16R:AB
1                 NaN  S400500     NaN     NaN     NaN      NaN     NaN
2                 NaN      NaN     NaN     NaN     NaN      NaN     NaN
3                 Nan      NaN     NaN     NaN     NaN     Sema     Nan
© www.soinside.com 2019 - 2024. All rights reserved.