【问题标题】:pd.df.groupby() events that never occur (0%)pd.df.groupby() 永远不会发生的事件 (0%)
【发布时间】:2020-12-05 09:30:51
【问题描述】:

我有一个pandas data frame,有两列,“早上”和“晚上”,分别代表早上和晚上的压力测量值。列中的值为“高”、“中”或“低”。

    morning evening
0   high    high
1   high    medium
2   high    medium
3   high    low
4   medium  high

我想创建两个列表,“pressure_change”和“pressure_change_likelihood”。 “pressure_change”描述了早晚之间发生了何种类型的压力变化,例如“高-低”是从早上的高压到晚上的低压的变化。 'pressure_change_likelihood' 描述了给定类型的压力变化的频率,例如,如果压力在早上很高,它在晚上的一半时间 (0.50) 变为中等。

pressure_change = [['high-high', 'high-medium', 'high-low'],
                  ['medium-high', 'medium-medium', 'medium-low'],
                  ['low-high', 'low-medium', 'low-low']]

pressure_change_likelihood = [[0.25, 0.50, 0.25],
                              [0.33, 0.00, 0.67],
                             [0.00, 1.00, 0.00]]

我已经能够很好地创建“pressure_change”,但问题是“pressure_change_likelihood”。我想我会尝试使用pd.df.groupby() 作为起点,然后将输出转换为列表列表,但是生成的熊猫系列不包括从未发生的事件的 0.00 值,以及价值观与我需要的不同。

import pandas as pd 

# Data 
data = [['high', 'high'], ['high', 'medium'], ['high', 'medium'], ['high', 'low'], ['medium', 'high'], ['medium', 'low'], ['medium', 'low'],['low', 'medium']] 
df = pd.DataFrame(data, columns = ['morning', 'evening']) 

# pressure_change
unique_array= df.morning.unique()
pressure_change = []
for i in unique_array:
    sub_list = []
    for k in unique_array:
        sub_list.append(i+'-'+k)
    pressure_change.append(sub_list)

# pressure_change_likelihood   
per = df.groupby(['morning', 'evening'])['evening'].size()
pressure_change_likelihood  = per.groupby(level=0).apply(lambda x: round(x / float(x.sum()), 2))

print(pressure_change_likelihood)

morning  evening
high     high       0.25
         low        0.25
         medium     0.50
low      medium     1.00
medium   high       0.33
         low        0.67
Name: evening, dtype: float64

感谢您的帮助!

【问题讨论】:

    标签: python pandas data-science data-cleaning


    【解决方案1】:

    让我们试试crosstab

    s = pd.crosstab(df.morning,df.evening,normalize='index').stack()
    Out[84]: 
    morning  evening
    high     high       0.250000
             low        0.250000
             medium     0.500000
    low      high       0.000000
             low        0.000000
             medium     1.000000
    medium   high       0.333333
             low        0.666667
             medium     0.000000
    dtype: float64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 2018-02-20
      • 2016-09-07
      • 2011-11-19
      • 1970-01-01
      相关资源
      最近更新 更多