繁体   English   中英

python在给定的数据框中查找子列表的计数频率并找到关联值

[英]python Find Count frequency of Sublist in given dataframe and find the associate value

假设我有一个数据框 A。

ID   action
1      A
2      B
3      C
4      D
5      E
6      A
7      B
8      C
...

我想从数据框 A 中找到以下模式:

[A,B,C]

我想计算子列表的频率并找到每个元素的ID:

output,这只是一种输出的想法,输出可以是dict或者list,我不确定哪种类型更好。

the frequency is 2:
[A:1,B:2,C:3]
[A:6, B:7,C:8]
mask = (df.action.shift(1, fill_value='')
          .add(df.action)
          .add(df.action.shift(-1, fill_value=''))
          .eq('ABC'))
output = df.loc[mask, 'ID'].apply(lambda x: f'[A:{x-1},B:{x}:C:{x+1}]')
print(f'The frequency is {len(output)}:')
for x in output:
    print(x)

输出:

The frequency is 2:
[A:1,B:2:C:3]
[A:6,B:7:C:8]

根据您想从数据框中找到匹配模式的问题

假设这是您的模式pattern = ['A', 'B', 'C']

如果模式列表中存在action列下的值,则查找行

new_df = df[df.action.isin(pattern)]

print(new_df)

输出:

   ID   action
0   1   A
1   2   B
2   3   C
5   6   A
6   7   B
7   8   C

然后,将数据帧转换为元组

id = list(new_df.ID)
action = list(new_df.action)
[(a, b) for (a, b) in zip(id, action)]

你会得到一个配对项目的列表作为一个元组

[(1, 'A'), (2, 'B'), (3, 'C'), (6, 'A'), (7, 'B'), (8, 'C')]

注意:如果你修改你的输出,我也可以修改我的解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM