我正在尝试使用每个属性(数字)的 count 创建新列,但它给了我行的总 count 如下所示
POM = pd.read_excel('POM.xlsx' , sheet_name='Sheet1')
POM['Merged']=POM['ACD ID'].astype(str)+PG['Date'].astype(str)
POM['Count']=POM['Merged'].count()
print(POM.head(2))
POM.to_excel('Test.xlsx' , index=False)
结果
Date ACD ID Merged Count
0 2022-03-08 14004 140042022-03-08 986
1 2022-03-09 14004 140042022-03-09 986
我怎样才能 count 在列(合并)中找到重复的唯一代码?
# Date ACD ID Merged Count
2022-03-08 00:00:00 14004 140042022-03-08 10
2022-03-09 00:00:00 14004 140042022-03-09 49
2022-03-10 00:00:00 14004 140042022-03-10 62
我尝试了下面的代码作为回答&我找到了准确的答案,但同时我由组(date+ ACD ID)创建的合并新库不准确,如下所示,date in(合并)不是匹配 date
POM = pd.read_excel('POM.xlsx' , sheet_name='Sheet1')
POM['Merged']=POM['ACD ID'].astype(str)+PG['Date'].astype(str)
#POM['Count'] = POM['Merged'].count()
POM['Count'] = POM['Merged'].copy().replace(POM['Merged'].value_counts().to_dict())
#POM['Count']=POM.groupby(["Merged"])["Merged"].transform("count")
#POM['counts'] = POM['Merged'].map(POM['Merged'].value_counts())
print(POM.head(6))
#POM.to_excel('Test.xlsx' , index=False)
结果
Date ACD ID Merged Count
0 2022-03-08 14004 140042022-03-08 1
1 2022-03-08 14005 140052022-03-09 1
2 2022-03-08 14006 140062022-03-10 1
3 2022-03-08 14007 140072022-03-15 1
回答1
尝试 groupby()
然后 transform("count")
:
import pandas
df = pandas.DataFrame({"date": ["2022", "2023", "2023", "2024"],
"id": ["a", "a", "a", "c"]})
df["merged"] = df["date"] + "_" + df["id"]
print(df)
> date id merged
0 2022 a 2022_a
1 2023 a 2023_a
2 2023 a 2023_a
3 2024 c 2024_c
df["counts"] = df.groupby(["merged"])["merged"].transform("count")
print(df)
> date id merged counts
0 2022 a 2022_a 1
1 2023 a 2023_a 2
2 2023 a 2023_a 2
3 2024 c 2024_c 1
查看https://stackoverflow.com/questions/17709270/create-column-of-value-counts-in-pandas-dataframe。
回答2
你可以这样做:
df['Count'] = df['Merged'].copy().replace(df['Merged'].value_counts().to_dict())
您创建 Merged 的副本,然后在 Merged 中创建 count values 并将其转换为 {id: count} 的字典,然后使用该字典替换复制的 Merged 列中的 id values。
这比 groupby
有额外的好处,您可以保留数据框的原始索引和形状,同时仍然填写每个 ID 的 counts。
前任:
df = pd.DataFrame({"date": ["2022", "2023", "2023", "2024"],
"id": ["a", "a", "a", "c"]})
df["merged"] = df["date"] + "_" + df["id"]
df['Count'] = df['merged'].copy().replace(df['merged'].value_counts().to_dict())
date id merged Count
0 2022 a 2022_a 1
1 2023 a 2023_a 2
2 2023 a 2023_a 2
3 2024 c 2024_c 1