Reputation: 25
I want to count the value with .value_counts() and keep it. for example
df = pd.DataFrame({ 'fruit':['apples']*3 + ['peaches']*5 + ['bananas']*3 +
['carrots']*4 + ['apricots']*10 })
print (df)
fruit
0 apples
1 apples
2 apples
3 peaches
4 peaches
df["fruit"].value_counts()
apricots 10
peaches 5
carrots 4
apples 3
bananas 3
Name: fruit, dtype: int64
and I want to align the values like,
print(df)
fruit
0 apricots
1 apricots
2 apricots
3 apricots
4 apricots
How can I do that??
plz, give me some your idea Thank you!
Upvotes: 1
Views: 72
Reputation: 29742
IIUC, use pandas.Series.value_counts
with pd.Index.repeat
:
s = df["fruit"].value_counts()
df["fruit"] = s.index.repeat(s)
print(df)
Output:
fruit
0 apricots
1 apricots
2 apricots
3 apricots
...
21 bananas
22 apples
23 apples
24 apples
Upvotes: 0
Reputation: 35145
I used groupby
and transform
to make it in one sentence.
df['count'] = df.groupby('fruit')['fruit'].transform('count')
Upvotes: 2
Reputation: 18923
Step 1: make value counts table
vc = df['fruit'].value_counts().reset_index()
index fruit
0 apricots 10
1 peaches 5
2 carrots 4
3 apples 3
4 bananas 3
Step 2: Merging
f = df.merge(vc, how='left', left_on='fruit', right_on='index')
fruit_x index fruit_y
0 apples apples 3
1 apples apples 3
2 apples apples 3
3 peaches peaches 5
4 peaches peaches 5
5 peaches peaches 5
6 peaches peaches 5
7 peaches peaches 5
8 bananas bananas 3
9 bananas bananas 3
10 bananas bananas 3
11 carrots carrots 4
12 carrots carrots 4
13 carrots carrots 4
14 carrots carrots 4
15 apricots apricots 10
16 apricots apricots 10
17 apricots apricots 10
18 apricots apricots 10
19 apricots apricots 10
20 apricots apricots 10
21 apricots apricots 10
22 apricots apricots 10
23 apricots apricots 10
24 apricots apricots 10
Step 3: Some clean-up
f = f.drop('index', axis=1).rename({'fruit_x': 'fruit', 'fruit_y': 'count'}, axis=1)
fruit count
0 apples 3
1 apples 3
2 apples 3
3 peaches 5
4 peaches 5
5 peaches 5
6 peaches 5
7 peaches 5
8 bananas 3
9 bananas 3
10 bananas 3
11 carrots 4
12 carrots 4
13 carrots 4
14 carrots 4
15 apricots 10
16 apricots 10
17 apricots 10
18 apricots 10
19 apricots 10
20 apricots 10
21 apricots 10
22 apricots 10
23 apricots 10
24 apricots 10
Upvotes: 0