Pandas将count的后缀添加到所有组[重复]

o4hqfura  于 2023-05-15  发布在  其他
关注(0)|答案(1)|浏览(200)

此问题已在此处有答案

Add suffixes to duplicate (column) cell values in Pandas depending on another column value (category)(1个答案)
3天前关闭。
我有一个数据框,我已经添加了一个类别。现在我想给组中的连续值添加一个计数。
数据看起来是这样的
| P1| P2|群|
| --------------|--------------|--------------|
| 十二岁|34人|一个|
| 九九|四十二|一个|
| 五十五|六十七|B|
| 五十五|一百|C类|
| 五十五|一百二十|C类|
| 十二岁|34人|一个|
| 九九|四十二|一个|
| 十二岁|34人|一个|
我想在一个组中添加一个元素的连续数量的计数,如
| P1| P2|群|群元素计数|
| --------------|--------------|--------------|--------------|
| 十二岁|34人|一个|A1|
| 九九|四十二|一个|A2|
| 五十五|六十七|B| B1|
| 五十五|一百|C类|C1|
| 五十五|一百二十|C类|C2|
| 十二岁|34人|一个|A1|
| 九九|四十二|一个|A2|
| 十二岁|34人|一个|A3|

import pandas as pd

data = {
  "p1": [12, 99, 55, 55,55,12,99,12],
  "p2": [34, 42, 67, 100,120, 34,42,34],
  "group":['A','A','B','C','C','A','A','A']
}

#load data into a DataFrame object:
df = pd.DataFrame(data)
df.head()

这不是真实的的数据,组是通过类似这样的方式添加的df[“group”] = pd.Categorical(p1,categories = grades.values(),ordered=True)

hi3rlvi2

hi3rlvi21#

Series.shiftSeries.cumsum为计数器GroupBy.cumcount创建连续组,并添加到group值:

s = df.groupby(df['group'].ne(df['group'].shift()).cumsum()).cumcount().add(1).astype(str)
df['group_element_count'] = df['group'].add(s)
print (df)
   P1   P2 group group_element_count
0  12   34     A                  A1
1  99   42     A                  A2
2  55   67     B                  B1
3  55  100     C                  C1
4  55  120     C                  C2
5  12   34     A                  A1
6  99   42     A                  A2
7  12   34     A                  A3

它是如何工作的:

print (df.assign(group=df['group'].ne(df['group'].shift()).cumsum(),
                 counter = s,
                 group_element_count = df['group'].add(s)))

   P1   P2  group counter group_element_count
0  12   34      1       1                  A1
1  99   42      1       2                  A2
2  55   67      2       1                  B1
3  55  100      3       1                  C1
4  55  120      3       2                  C2
5  12   34      4       1                  A1
6  99   42      4       2                  A2
7  12   34      4       3                  A3

相关问题