英文:
How to group by counted value (python, pandas)
问题
你好,你可以尝试使用以下代码来实现你的需求:
import pandas as pd
# 创建DataFrame
data = {'SerialNr': [1, 2, 3, 4],
'Amount': [2, 4, 3, 2]}
df = pd.DataFrame(data)
# 使用groupby和count函数来计算数量
result = df.groupby('Amount')['SerialNr'].count().reset_index()
result.columns = ['Amount', 'Quantity of SerialNr']
# 打印结果
print(result)
这段代码会根据 "Amount" 列进行分组,然后计算每个分组中的 "SerialNr" 数量,最后得到你所需的结果表格。
英文:
Hello I have this Dataframe:
SerialNr | Amount |
---|---|
1 | 2 |
2 | 4 |
3 | 3 |
4 | 2 |
And I want a table that shows me how many serial numbers in the right column have the same numbers.
Here for example it would look like this
Amount | Quantity of SerialNr |
---|---|
1 | 0 |
2 | 2 |
3 | 1 |
4 | 1 |
It should sum up the Serialnummer with the same amount
Tried to do it with groupby but did not work
答案1
得分: 1
根据您的期望输出需要Amount的数量
,因此可以使用Series.value_counts
结合Series.reindex
,以1
为起始点进行如下操作:
s = df['Amount'].value_counts()
df = (s.reindex(range(1, s.index.max()+1), fill_value=0)
.rename_axis('Amount')
.reset_index(name='Amount的数量'))
print (df)
Amount Amount的数量
0 1 0
1 2 2
2 3 1
3 4 1
或者使用Categorical
:
cats = range(1, df.Amount.max()+1)
df = (pd.Categorical(df['Amount'], categories=cats)
.value_counts()
.rename_axis('Amount')
.reset_index(name='Amount的数量'))
print (df)
Amount Amount的数量
0 1 0
1 2 2
2 3 1
3 4 1
英文:
From your expected ouput need Quantity of Amount
, so use Series.value_counts
with Series.reindex
by range
starting by 1
:
s = df['Amount'].value_counts()
df = (s.reindex(range(1, s.index.max()+1), fill_value=0)
.rename_axis('Amount')
.reset_index(name='Quantity of Amount'))
print (df)
Amount Quantity of SerialNr
0 1 0
1 2 2
2 3 1
3 4 1
Or use Categorical
:
cats = range(1, df.Amount.max()+1)
df = (pd.Categorical(df['Amount'], categories=cats)
.value_counts()
.rename_axis('Amount')
.reset_index(name='Quantity of Amount'))
print (df)
Amount Quantity of Amount
0 1 0
1 2 2
2 3 1
3 4 1
答案2
得分: 1
另一个可能的解决方案:
(pd.concat([df.set_index('SerialNr'),
df['Amount'].value_counts().rename('Amount的数量')], axis=1)
.fillna(0, downcast='infer').reset_index()
.drop('Amount', axis=1).rename({'index': 'Amount'}, axis=1))
输出:
Amount count
0 1 0
1 2 2
2 3 1
3 4 1
英文:
Another possible solution:
(pd.concat([df.set_index('SerialNr'),
df['Amount'].value_counts().rename('Quantity of Amount')], axis=1)
.fillna(0, downcast='infer').reset_index()
.drop('Amount', axis=1).rename({'index': 'Amount'}, axis=1))
Output:
Amount count
0 1 0
1 2 2
2 3 1
3 4 1
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论