我正在寻找一种快速的方法来完成以下任务:
假设我有以下数据框:
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']
解决问题最有效的方法是什么?
答案 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']=[]