我对以下示例csv文件有以下要求,
colA colB NewCol
1 val1 val1
1 val2 val1 + val2
1 val3 val1 + val2 + val3
2 val4 val4
2 val5 val4 + val5
2 val6 val4 + val5 + val6
3 val7 val7
3 val8 val7 + val8
3 val9 val7 + val8 + val9
我想向df添加一个新列,以便它仅为相同的ID值添加连续的colB值。 B列可以是整数或字符串。
答案 0 :(得分:2)
使用<link href="{{ secure_asset('css/app.css') }}" rel="stylesheet">
<script src="{{ secure_asset('js/app.js') }}"></script>
+ langList.add('"' + obj.getCode() + '"');
:
groupby
要对字符串求和,可以对cumsum
使用列表推导:
df['NewCol'] = df.groupby('colA')['colB'].cumsum()
说明
groupby
迭代df = df.sort_values('colA')
df['C'] = [''.join(g.iloc[:i+1].values) \
for _, g in df.groupby('colA')['colB'] \
for i in range(len(g.index))]
print(df)
colA colB C
0 1 val1 val1
1 1 val2 val1val2
2 1 val3 val1val2val3
3 2 val4 val4
4 2 val5 val4val5
5 2 val6 val4val5val6
6 3 val7 val7
7 3 val8 val7val8
8 3 val9 val7val8val9
元素。由于我们仅对值感兴趣,因此此处忽略索引groupby
。for _, g in df.groupby(...)[...]
,即遍历组中的项目数。_
个值上应用range(len(g.index))
。我们使用''.join
提取组中的前i
个值。答案 1 :(得分:1)
使用np.cumsum
或pd.Series.cumsum
最适合数字和字符串的方式:
df['NewCol'] = df.groupby('colA')['colB'].apply(np.cumsum)
或者:
df['NewCol'] = df.groupby('colA')['colB'].apply(pd.Series.cumsum)
print (df)
colA colB NewCol
0 1 val1 val1
1 1 val2 val1val2
2 1 val3 val1val2val3
3 2 val4 val4
4 2 val5 val4val5
5 2 val6 val4val5val6
6 3 val7 val7
7 3 val8 val7val8
8 3 val9 val7val8val9