【发布时间】:2018-06-21 12:10:52
【问题描述】:
I have a dataframe,df1
inp aco drtn
2.3.6 dp Less than 1 min
2.3.6 ft 5-10 min
2.5.9 dp More than 1 hour
0.8.0 dp 1-5 min
2.3.6 dp 10-30 min
2.3.6 dp More than 1 hour
0.8.0 dp Less than 1 min
0.8.0 dp 1-5 min
df1 应通过计算出现次数按 3 列分组。新的数据框 df2 将如下所示:
inp aco drtn count
2.3.6 dp Less than 1 min 1
2.3.6 ft 5-10 min 1
2.5.9 dp More than 1 hour 1
0.8.0 dp 1-5 min 2
2.3.6 dp 10-30 min 1
2.3.6 dp More than 1 hour 1
6.2.6 dp 1-5 min 1
列:“drtn”应转换为新列:“convrt”。 例如,此转换列将如下所示:小于 1 分钟=0.59 分钟,大于 1 小时=61 分钟,1-5 分钟=5 分钟,5-10 分钟=10,10-30 分钟=30 分钟。另一个新列:'calc' 应该定义为 'count' 列的值乘以列中的值: 'convrt' 。然后一个新的数据帧,df3 应该如下所示:
inp aco drtn count convrt calc
2.3.6 dp Less than 1 min 1 0.59 0.59
2.3.6 ft 5-10 min 1 10 10
2.5.9 dp More than 1 hour 1 61 61
0.8.0 dp 1-5 min 2 5 10
2.3.6 dp 10-30 min 1 30 30
2.3.6 dp More than 1 hour 1 61 61
6.2.6 dp 1-5 min 1 5 5
然后是一个新的数据框,df4,由列过滤:'aco'。例如:只有具有 dp 的值才应该被保留。然后是一个新的列:pct,它计算列中变化的百分比:'calc'。
inp aco drtn count convrt calc pct
2.3.6 dp Less than 1 min 1 0.59 0.59 0.003
2.5.9 dp More than 1 hour 1 61 61 36.40
0.8.0 dp 1-5 min 2 5 10 0.060
2.3.6 dp 10-30 min 1 30 30 17.90
2.3.6 dp More than 1 hour 1 61 61 36.40
6.2.6 dp 1-5 min 1 5 5 0.030
然后是一个新的数据框,df5,带有一个新列:'pct',它将列中的所有值相加) 并乘以 100,索引命名为 column:'aco' 的过滤值。然后,一个新列“totalCalcFilteredColumn”获取该列的总和:“calc”在过滤的数据帧中,df4。 另一列名为:'diff',它将df3的列:'calc'和df4的列:'calc'中的所有值相加,然后进行减法(df3-df4)
pctTime totalCalcFilteredColumn diff
dp 94.37 167.59 10
ft 5.63 10 167.59
我该怎么办?
【问题讨论】:
-
天哪,这无异于让别人为你完成整个项目。请提出单独的问题,这wayyyy超出了SO的范围。
-
没有进展!我已经有一段时间了!
-
就像我说的。一次一个问题。你有3-4个。现在取出除第一个以外的所有内容。然后,打开另一个问题,然后问下一部分……等等。
-
你搜索了吗?为什么不从谷歌搜索开始?你很清楚每一步你想要什么。把它变成英文然后搜索,伙计。例如,“通过计算出现次数按 3 列分组”可以变成谷歌搜索“”“按列分组并计算出现次数”“”
-
@Tai 我真的做到了!我的第一个瓶颈是:
df=pd.DataFrame(df, columns= ['inp','aco','drtn'])df=df .groupby(['inp'])['aco'].value_counts().sort_values (ascending=False).reset_index(name='count')