【发布时间】:2021-09-17 13:44:06
【问题描述】:
我的数据包含一些变量,其中包含来自多答案问题的数据。这些存储为字符串(逗号分隔)并且不按值排序。
我需要同时对 2 个或更多这些变量进行不同的计数,即获取它们唯一值的每个组合的频率。
我还有第二个数据框,其中包含每个变量的可用代码
df_meta['a']['Categories'] = ['1', '2', '3','4']
df_meta['b']['Categories'] = ['1', '2']
如果这是我的数据
df = pd.DataFrame(np.array([["1,3","1"],["3","1,2"],["1,3,2","1"],["3,1","2,1"]]),
columns=['a', 'b'])
index a b
1 1,3 1
2 3 1,2
3 1,3,2 1
4 3,1 2,1
理想情况下,这就是输出的样子
a b count
1 1 3
1 2 1
2 1 1
2 2 0
3 1 4
3 2 2
4 1 0
4 2 0
虽然如果我无法获得零计数,这会很好
a b count
1 1 3
1 2 1
2 1 1
3 1 4
3 2 2
到目前为止,我通过使用 split 和 value_counts 分别获得了每个变量的计数
df["a"].str.split(',',expand=True).stack().value_counts()
3 4
1 3
2 1
df["b"].str.split(',',expand=True).stack().value_counts()
1 4
2 2
但由于索引的差异,我不知道如何按它们进行分组。
df2 = pd.DataFrame()
df2["a"] = df["a"].str.split(',',expand=True).stack()
df2["b"] = df["b"].str.split(',',expand=True).stack()
df2.groupby(['a','b']).size()
a b
1 1 3
3 1 1
2 1
有没有办法将 groupby 调整为只计算第一个索引的实例或另一种方法来更有效地计算唯一组合?
我也可以使用 df_meta 数据框遍历所有代码,但一些实际变量有 300-400 个代码,而且速度很慢,当我尝试跨越其中的 2-3 个代码时,如果可以使用 groupby 或另一个函数,它应该工作得更快。
【问题讨论】:
标签: python pandas split pandas-groupby