【发布时间】:2019-04-24 15:38:55
【问题描述】:
我正在尝试根据数据框中列值的某些条件从 pandas 数据框中生成一个列表,我的 df 看起来像
df =
48 150 39 0
0 BE0974302342 0 0 21
1 BE0974302342 3 3 19
2 BE0974302342 F 2 2
3 FR0000073843 0 0 22
4 FR0000073843 3 3 20
5 FR0000073843 F 2 2
6 FR0000076861 0 0 21
7 FR0000076861 3 3 18
8 FR0000076861 F 1 3
9 FR0000076861 F 2 3
10 FR0000076887 0 0 13
11 FR0000076887 3 3 11
12 FR0000076887 8 8 19
13 FR0000076887 F 2 2
14 FR0000077562 0 0 22
15 FR0000077562 3 3 19
16 FR0000077562 F 2 3
17 FR0000079147 0 0 20
18 FR0000079147 3 3 16
19 FR0000079147 F 1 1
20 FR0000079147 F 2 4
21 FR0004034072 0 0 14
22 FR0004034072 3 3 12
23 FR0004034072 8 8 21
24 FR0004034072 F 2 2
25 FR0004152874 0 0 22
26 FR0004152874 3 3 20
27 FR0004152874 F 1 1
28 FR0004152874 F 2 2
29 FR0004178572 0 0 21
...
这里第150列和第39列的组合是有意义的,所以我想根据组合提取计数,有6种可能的组合
150 39
0 0
3 3
4 4
8 8
F 1
F 2
我想形成一个 final_list,其中包含“48”列中每个值的每个组合的计数,
例如。
'BE0974302342', (150=0, 39=0) record count is 21, (150=3, 39=3) is 19, (150=4, 39=4) is 0, (150=8, 39=8) is 0, (150=F, 39=1) is 0, (150=F,39=2) is 2
所以最终的记录列表将类似于
[[BE0974302342,21,19,0,0,0,2],
[FR0000073843,22,20,0,0,0,2],
[FR0000076861,21,18,0,0,1,3]...]
我尝试了什么:我尝试将 df 转换为列表,然后遍历每个子列表并检查 150 和 39 值的组合,这部分有效,但我希望有一个更好的解决方案,它可以完美地工作,会感谢任何帮助或对我应该遵循的方法的建议,提前致谢。
【问题讨论】:
-
您可以创建一个新列,该列将合并两个所需的元组,然后简单地计算直方图 - 计算唯一元素
-
这方法看起来不错,让我试试,非常感谢:)
-
或者你可以看看stackoverflow.com/questions/35584085/…,下面的解决方案是 df.groupby(df.columns.tolist(),as_index=False).size()
-
谢谢你,彼得 :)