问题描述
我有一个重复行('id')的数据框。
我想汇总数据,但首先需要对每个ID的唯一会话进行求和。
mypackage
__init__.py
mymodule.py
此代码运行良好,但是当我想将此新列'ncount'添加到我的数据框中时效果不佳。
CURR_DIR = dirname(realpath(__file__))
DEFAULT_SCHEMA_FILE = join(
dirname(CURR_DIR),"default_files","default_schema1.csv"
)
def myfunc(schema = DEFAULT_SCHEMA_FILE):
#do stuff with CSV
我尝试使用转换,但没有用。
id session
123 X
123 X
123 Y
123 Z
234 T
234 T
这是转换代码的结果(我的数据作为重复ID):
df['ncount'] = df.groupby('id')['session'].nunique().reset_index()
这是我感兴趣的结果:
df['ncount'] = df.groupby('id')['session'].transform('nunique')
解决方法
使用以下步骤:
1。将数据分组并存储在单独的变量中。
2。然后合并回到原始数据框。
代码:
import pandas as pd
df = pd.DataFrame({"id":[123,123,234,234],"session":["X","X","Y","Z","T","T"]})
x = df.groupby(["id"])['session'].nunique().reset_index()
res = pd.merge(df,x,how="left",on="id")
print(res)
如果需要,您可以重命名列名。
,使用.count()
步骤:
1:按“ id”对数据进行分组,然后计算id值的值
2:将索引格式的计数减少1并合并到两个数据帧
import pandas as pd
df = pd.DataFrame({"id":[123,"T"]})
uniq_df = df.groupby(["id"])["session"].count().reset_index()
uniq_df["session"] = uniq_df["session"] - 1
result = pd.merge(df,uniq_df,on="id")
print(result)