我有一个示例 Dataframe ,其中所有数字都是用户ID:| 从|到|| - ------|- ------|| 1个|三个|| 1个|第二章|| 第二章|三个|如何计算每列的出现次数,基于相同的值将其相加,并在新的 Dataframe 中以以下格式显示?| 用户ID|发生率|| - ------|- ------|| 1个|第二章|| 第二章|第二章|| 三个|第二章|谢谢你。
kgsdhlau1#
IIUC,您可以stack然后value_counts
stack
value_counts
out = (df.stack().value_counts() .to_frame('Occurences') .rename_axis('UserID') .reset_index())
print(out) UserID Occurences 0 1 2 1 2 2 2 3 2
inb24sb22#
将DataFrame.melt与GroupBy.size一起使用:
DataFrame.melt
GroupBy.size
df = df.melt(value_name='UserID').groupby('UserID').size().reset_index(name='Occurences') print (df) UserID Occurences 0 1 2 1 2 2 2 3 2
ybzsozfc3#
pd.Series.value计数方法可用于对“from”和“to”列中每个userID的示例进行计数,pd.concat可用于合并结果。最后,使用pd.DataFrame.reset索引方法从结果系列创建 Dataframe :
pd.Series.value
userID
pd.concat
import pandas as pd data_frame = pd.DataFrame({'from': [1, 1, 2], 'to': [3, 2, 3]}) occur = pd.concat([df['from'].value_counts(), df['to'].value_counts()]) result_df = occur.reset_index() result_df.columns = ['UserID', 'occur'] result_df = result_df.groupby(['UserID'])['occur'].sum().reset_index() UserID Occur 0 1 2 1 2 2 2 3 2
3条答案
按热度按时间kgsdhlau1#
IIUC,您可以
stack
然后value_counts
inb24sb22#
将
DataFrame.melt
与GroupBy.size
一起使用:ybzsozfc3#
pd.Series.value
计数方法可用于对“from”和“to”列中每个userID
的示例进行计数,pd.concat
可用于合并结果。最后,使用pd.DataFrame.reset索引方法从结果系列创建 Dataframe :