【问题标题】:Return a list of values if column value matches else add 0 in list如果列值匹配,则返回值列表,否则在列表中添加 0
【发布时间】:2018-07-19 14:26:04
【问题描述】:

我刚刚尝试了 for 循环,但它不起作用, 我的数据在哪里,

      label_count  label     aging_period
0            21     good          0-3
1             1      TNR          3-6
2            80  average          3-6
3            19      bad          3-6
4            75     good          3-6
5            13     TOTB          6-9
6           104  average          6-9
7           128      bad          6-9
8            56     good          6-9
9            12     TOTB         9-12
10          101  average         9-12
11          275      bad         9-12
12           35     good         9-12
13            5     TOTB        12-24
14           26  average        12-24
15           46      bad        12-24
16           20     good        12-24
17            1     TOTB          24+
18            1  average          24+
19            3     good          24+

我想要一个值列表,例如,

average =  [0, 80, 104, 101, 26, 1]
   bad = [0, 19, 128, 275, 46, 0]

现在由于 0-3 没有平均值,所以添加 0。

我的意思是对于每个 'aging_period' 和每个标签,如果存在数据,则添加他的对应标签计数,否则在列表中添加 0

【问题讨论】:

  • “标签”的每个单元格中都有数据。什么定义了数据存在(或不存在)?

标签: python list pandas dataframe


【解决方案1】:

你可以使用pivot 然后fillna

df.pivot('label','aging_period','label_count').fillna(0).astype(int)
Out[557]: 
aging_period  0-3  12-24  24+  3-6  6-9  9-12
label                                        
TNR             0      0    0    1    0     0
TOTB            0      5    1    0   13    12
average         0     26    1   80  104   101
bad             0     46    0   19  128   275
good           21     20    3   75   56    35

然后切片你需要的索引

nedf=df.pivot('label','aging_period','label_count').fillna(0).astype(int)
nedf.loc['average'].tolist()
Out[559]: [0, 26, 1, 80, 104, 101]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多