现在我有一个包含两列的数据框:
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
有什么技巧可以做到吗?或者是曼纽尔循环?
因此重建示例的原型: 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"] )
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