如何在pandas中操作这个Dataframe

时间:2016-06-09 08:53:01

标签: python pandas dataframe

enter image description here

我想操纵上面的pandas Dataframe来找到'第一次登录的天数< 14天“每个'销售链'并按天分组,得到如下答案:”5月1日,20%的网络销售用户,而其他销售渠道的5%用户在14天内登录“

那么我可以根据这些百分比数字绘制所有销售渠道的折线图。

请告诉我该怎么做。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容计算(而不是百分比)

dataframe['amount'] = 1

output = dataframe.groupby(['Opened','Sales chain', 'Days to 1st login < 14 days'],as_index = False).sum()

然后计算百分比似乎相对容易。如果您的数据框架不大,则可以迭代行:

for i in range(len(output)/2):
    temp = output.amount[i]+output.amount[i+1]
    output.amount[i] /= 1.*temp
    output.amount[i+1] /= 1.*temp

我希望此代码有效,因为由于我没有创建数据帧的代码,因此我无法对其进行测试。

答案 1 :(得分:0)

您可以使用交叉表

In [29]: df
Out[29]: 
    Opened       Sales   Chain Days to 1st login <14
0   140936  02.05.2015  Others                   Yes
1   140937  02.05.2015  Others                    No
2   140938  02.05.2015    Aspa                    No
3   140939  02.05.2015  Others                   Yes
4   140940  02.05.2015  Others                    No
5   140941  02.05.2015  Others                    No
6   140942  02.05.2015    Aspa                    No
7   140943  02.05.2015  Others                   Yes
8   140944  02.05.2015     Web                    No
9   140945  01.05.2015     Web                    No
10  140946  01.05.2015     Web                    No

In [30]: df_counts = pd.crosstab([df['Sales'], df['Chain']], df['Days to 1st login <14'])

In [31]: df_counts
Out[31]: 
Days to 1st login <14  No  Yes
Sales      Chain              
01.05.2015 Web          2    0
02.05.2015 Aspa         2    0
           Others       3    3
           Web          1    0

In [32]: 100 * df_counts['Yes'] / (df_counts['Yes'] + df_counts['No'])
Out[32]: 
Sales       Chain 
01.05.2015  Web        0.0
02.05.2015  Aspa       0.0
            Others    50.0
            Web        0.0
dtype: float64
使用 groupby 应用

或更简单

In [33]: df.groupby(['Sales', 'Chain']).apply(lambda x: 100 * len(x[x['Days to 1st login <14'] == 'Yes']) / len(x))
Out[33]: 
Sales       Chain 
01.05.2015  Web        0.0
02.05.2015  Aspa       0.0
            Others    50.0
            Web        0.0
dtype: float64