将数据框缩小为唯一的值和数量

时间:2019-06-07 08:17:21

标签: python pandas

我需要减少此DataFrame的帮助:

    2-gram 3-gram 4-gram 5-gram
0       FF    FF-   FF-F  FF-FF
1       -F    FFF   FFF-  FF-FF
2       FF    F-F   FFF-  F-FF+
3       F-    FF-   FF+-  --FF+
4       FF    FF+   -FF+  --FF+
5       F-    --F   --FF  --FF+
6       FF    F+-   +--F  --FF+
7       +-    -FF   F+--  -F-FF
8       -F    +--   FF+-  FF-FF
9       F+    FF+   F-FF  F-FF+
10      --    --F   FF-F  --FF+
11      FF    F+-   FF-F  -F-FF
12      +-    F-F   F+--  F-FF+
13      -F    FFF   FF+-  --FF+
14      F+    -FF   F-FF  --FF+
15      --    F-F   F-FF  --FF+
16      FF    F+-   +--F  --FF+
17      +-    -FF   F+--  -F-FF
18      F-    +-F   FF+-  F-FF+
19      FF    -FF   -FF+  -F-FF
20      FF    F-F   --FF  F-FF+
21      -F    F+-   +-F-  -F-FF
22      FF    -FF   FFF-  F-FF+
23      -F    +--   FF+-  --FF+
24      F+    FF+   F-FF  -F-FF
25      --    --F   F-FF  F-FF+
26      FF    F+-   +-F-  -F-FF
27      +-    -FF   FFF-  FF-FF
28      F-    +-F   FF+-  FF-FF
29      FF    -FF   -FF+  F-FF+
..     ...    ...    ...    ...
221     -F   None   None   None
222     FF   None   None   None
223     -F   None   None   None
224     F+   None   None   None
225     -F   None   None   None
226     -F   None   None   None
227     FF   None   None   None
228     -F   None   None   None
229     F+   None   None   None
230     -F   None   None   None
231     -F   None   None   None
232     FF   None   None   None
233     -F   None   None   None
234     F+   None   None   None
235     --   None   None   None
236     FF   None   None   None
237     +-   None   None   None
238     F-   None   None   None
239     FF   None   None   None
240     F-   None   None   None
241     FF   None   None   None
242     +-   None   None   None
243     -F   None   None   None
244     F+   None   None   None
245     --   None   None   None
246     FF   None   None   None
247     +-   None   None   None
248     F-   None   None   None
249     FF   None   None   None
250      F   None   None   None

对于每个的唯一值以及每个列中这些唯一值的计数,如下所示:

    2-gram  3-gram  4-gram      5-gram  
0   FF  11  FF- 2   FF-F    3   FF-FF   5
1   -F  5   FFF 2   FFF-    4   F-FF+   8
2   F-  4   F-F 4   FF+-    6   --FF+   10
3   +-  4   FF+ 3   -FF+    3   -F-FF   7
4   F+  3   --F 3   --FF    2       
5   --  3   F+- 5   +--F    2       
6           -FF 7   F+--    3       
7           +-- 2   F-FF    5       
8           +-F 2   +-F-    2       

数据帧是由一串长的“ F”,“-”和“ +”字符组成的,这些字符串已分为2、3、4和5组。

我认为我需要使用Groupby()函数,但是我不知道如何合并值计数

谢谢

2 个答案:

答案 0 :(得分:1)

使用Series.value_counts

df1 = pd.DataFrame()
for x in df.columns:
    s = df[x].value_counts() 
    df1[x] = pd.Series(s.index + ' ' + s.astype(str).values)

答案 1 :(得分:1)

这里是在每一列上使用pd.value_counts并串联结果列表的人:

l = [pd.value_counts(df[i]).reset_index().astype(str).apply(' '.join, 1) for i in df]
out = pd.concat(l, 1).fillna('')
out.columns = df.columns

  2-gram 3-gram  4-gram    5-gram
0  FF 11  -FF 7  FF+- 6  --FF+ 10
1   -F 5  F+- 5  F-FF 5   F-FF+ 8
2   +- 4  F-F 4  FFF- 4   -F-FF 7
3   F- 4  FF+ 3  FF-F 3   FF-FF 5
4   F+ 3  --F 3  -FF+ 3          
5   -- 3  FFF 2  F+-- 3          
6         +-- 2  --FF 2          
7         +-F 2  +-F- 2          
8         FF- 2  +--F 2