【问题标题】:Calculating most frequently occuring row-specific combinations among dataframe in Python计算Python中数据帧中最常出现的特定行组合
【发布时间】:2021-02-26 02:15:42
【问题描述】:

我有一个数据框,其中包含用逗号分隔的文本

1  a,b,c,d
2  a,b,e,f
3  a,b,e,f

我正在尝试输出打印 2 个字母 + 整个数据帧中出现次数的前 2 个最常见组合。因此,基于上述数据框,输出将是

(a,b,3) (e,f,2)

a和b的组合出现3次,e和f的组合出现2次。 (是的,有更多的连击发生了 2 次,但我们可以在这里将其切断以保持简单)我真的很困惑如何开始这个。我在考虑可能遍历每一行并以某种方式存储所有组合,最后我们可以打印出前 n 个组合以及它们在数据框中出现的次数。 以下是我目前的想法。

import pandas as pd   
from io import StringIO   

StringData = StringIO("""Date
a,b,c,d
a,b,e,f
a,b,e,f
""") 

df = pd.read_csv(StringData, sep =";")   

for index, row in df.iterrows():
    (somehow get and store all possible 2 word combos?)

【问题讨论】:

    标签: python dataframe combinations


    【解决方案1】:

    你可以这样做:

    import numpy as np
    import pandas as pd
    from io import StringIO
    
    StringData = StringIO("""Date
    a,b,c,d
    a,b,e,f
    a,b,e,f
    """)
    
    df = pd.read_csv(StringData, sep =";")
    df['Date'] = df['Date'].apply(lambda x: x.split(','))
    df['combinations'] = df['Date'].apply(lambda x: [(x[i], x[i+1]) for i in range(len(x)-1)])
    df = df.explode('combinations')
    df = df.groupby('combinations').agg('count').reset_index()
    df.sort_values('Date', inplace=True, ascending=False)
    df['combinations'] = df.values.tolist()
    df.drop('Date', axis=1, inplace=True)
    df['combinations'] = df['combinations'].apply(np.hstack)
    
    print(df.iloc[:2, :])
    

    输出:

      combinations
    0    [a, b, 3]
    2    [b, e, 2]
    

    【讨论】:

      猜你喜欢
      • 2021-04-15
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多