如何循环pandas数据帧并生成新行?

时间:2018-01-30 11:52:48

标签: python pandas

我有以下格式的pandas数据框:

User    app      percent
1        a         0.8
1        b         0.3
1        c         0.2
1        d         0.9
1        e         0.6
1        f         0.8
1        g         0.4
1        h         0.2
1        i         0.1
1        j         0.6

每个用户至少有10个应用。

我需要一个循环,它将在百分比列中添加值为0.5的每个用户行。

每个用户的行总数为50。

例如,用户编号1有10个应用程序,因此循环需要超过表中的10个值并生成40行0.5值。

最后一个单元格将乘以上表中的10个值(百分比列),并将其乘以0.5值-40次。

这是用户编号1的计算:

  0.8* 0.3* 0.2* 0.9* 0.6* 0.8* 0.4* 0.2* 0.1* 0.6* 0.5* 0.5*.....*0.5

3 个答案:

答案 0 :(得分:0)

我认为您需要为每个用户提供汇总sizeGroupBy.prod,并按numpy.power - Series创建的0.5汇总由减去{{{ 1}}来自50

a['size']行的示例,而不是8,以便更好地验证:

50
print (df)
   User app  percent
0     1   a      0.8
1     1   b      0.3
2     1   c      0.2
3     1   d      0.9
4     1   e      0.6
5     1   f      0.8
6     2   g      0.4
7     2   h      0.2
8     2   i      0.1
9     2   j      0.6

a = df.groupby('User')['percent'].agg(['size','prod']) print (a) size prod User 1 6 0.020736 2 4 0.004800 b = a['prod'] * np.power(0.5, a['size'].rsub(8)) #same as #b = a['prod'] * np.power(0.5, 8 - a['size']) print (b) User 1 0.005184 2 0.000300 dtype: float64 添加reset_index

DataFrame

答案 1 :(得分:0)

看看这是否是您正在寻找的 -

{{1}}

输出

{{1}}

答案 2 :(得分:0)

我可能仅为用户1提供一个示例。这里我生成一个类似的数据,然后将它乘以5次以获得每行5次重复,总共50行。然后我把它作为数据帧。

import pandas
import numpy
import random

user = [1 for i in range(10)]
app = ['a'+str(i+1) for i in range(10)]
percent = [0.1 + i*0.1 for i in range(10)]

data = list(zip(user, app, percent));
data_to_edit = 5*data;

df = pandas.DataFrame(data_to_edit, columns=['User','App','Percent']);

现在创建前10个百分比数据(原始数据)的产品。

percent_product=numpy.prod(df['Percent'][0:9]);

现在我们需要做的就是编辑剩余的40行,但仅限于'Percent'列。

for i in df.index[10:]:
    df['Percent'][i] = percent_product*(0.5**(i-9));

现在前10行将是相同的,但其他行乘以0.5的倍数。

这是你的意思吗?