将Pandas Dataframe 分成20个一组,并为每个组分配列值

quhf5bfb  于 2022-12-02  发布在  其他
关注(0)|答案(5)|浏览(200)

我有一个df如下。

TimeStamp,Value
 t1,akak
 t2,bb
 t3,vvv
 t5,ff
 t6,44
 t7,99
 t8,kfkkf
 t9,ff
 t10,oo

我想将df拆分为2行大小,并将class指定为组号。

TimeStamp,Value, class
 t1,akak,c1
 t2,bb,c1
 t3,vvv,c2
 t4,ff,c2
 t5,44,c3
 t6,99,c3
 t7,kfkkf,c4
 t8,ff,c4
 t9,oo,c5
 t10,oo,c5

一种方法是迭代,一次做一个。我在想Pandas有一种内在的方法来做它

ccgok5k5

ccgok5k51#

您可以:
df['class'] = [i//2 for i in range(len(df))]
但这是一个相当有限的答案;您可能希望在其他列上应用某个值来获取组ID,或者您可能已经为class列应用了一个特定的标签,在这种情况下,您可以在序列上使用map function将这些数字转换为其他值。

pxyaymoc

pxyaymoc2#

你可以用它来实现你想要的:

df["class"] = [f"c{(i // 2) + 1}" for i in range(df.shape[0])]
8ulbf1ek

8ulbf1ek3#

您可以使用numpy对操作进行矢量化:

import numpy as np

df['class'] = np.core.defchararray.add('c', (np.arange(len(df))//2+1).astype(str))

或者,对于系列:

df['class'] = pd.Series(np.arange(len(df))//2+1, index=df.index, dtype='string').radd('c')

输出量:

TimeStamp  Value class
0        t1   akak    c1
1        t2     bb    c1
2        t3    vvv    c2
3        t4     ff    c2
4        t5     ff    c3
5        t6     44    c3
6        t7     99    c4
7        t8  kfkkf    c4
8        t9     ff    c5
9       t10     oo    c5
htzpubme

htzpubme4#

Another possible solution:

df['class'] = ['c' + str(1+x) for x in np.repeat(range(int(len(df)/2)), 2)]

Output:

TimeStamp  Value class
0        t1   akak    c1
1        t2     bb    c1
2        t3    vvv    c2
3        t4     ff    c2
4        t5     ff    c3
5        t6     44    c3
6        t7     99    c4
7        t8  kfkkf    c4
8        t9     ff    c5
9       t10     oo    c5
mf98qq94

mf98qq945#

试试这个:

df.assign(Class=(df.index//2+1).map('c{}'.format))
>>>

TimeStamp   Value   Class
0   t1     akak     c1
1   t2     bb       c1
2   t3     vvv      c2
3   t5     ff       c2
4   t6     44       c3
5   t7     99       c3
6   t8     kfkkf    c4
7   t9     ff       c4
8   t10    oo       c5

相关问题