熊猫:要列出的列的累积值[不带迭代]

时间:2019-08-21 00:04:52

标签: python pandas

我正在寻找一种快速的方法来完成以下任务:

假设我有以下数据框:

            value
index 
    1        'a'
    2        'b'
    3        'c'
    4        'd'

我想将其扩展为以下数据框:

            value    cum_value
index 
    1        'a'     []
    2        'b'     ['a']
    3        'c'     ['a', 'b']
    4        'd'     ['a', 'b', 'c']

解决问题最有效的方法是什么?

3 个答案:

答案 0 :(得分:3)

这是匹配输出的一种方法,添加一个9月不包含在字符串类型列中

s = (df.value+'~').shift().fillna('').cumsum().str[:-1].str.split('~')
index
1           []
2          [a]
3       [a, b]
4    [a, b, c]
Name: value, dtype: object
df['New'] = s

答案 1 :(得分:1)

将列转换为值列表并移位。这会导致第一个元素变为NaN,但是我们可以使用df.at将此值更改为空列表。

df = pd.DataFrame(['a', 'bb', 'hi mom', 'this is a test'])

df[1] = df[0].apply(lambda x: [x]).shift()
df.at[0,1] = []
df[1] = df[1].cumsum()

print(df)
                0                1
0               a               []
1              bb              [a]
2          hi mom          [a, bb]
3  this is a test  [a, bb, hi mom]

答案 2 :(得分:1)

df['cum_value'] = df['value'].cumsum().apply(lambda char: [c for c in char]).shift()
df.at[0,'cum_value']=[]

编辑-感谢评论Jab:

df['cum_value'] = df['value'].cumsum().apply(list).shift()
df.at[0,'cum_value']=[]