[英]How to split rows in a dataframe based on column value?
我试图根据列中是否存在值将我的行拆分为多行。 我能够根据列值进行过滤,但想根据条件将行分成两部分,并仅返回行的特定部分。 数据框由不同类型的付款组成,活动字段表示发生的付款类型。 我希望何时有特定的付款类型将行分成两部分。 在下面的示例中,当存在付款 2 时,我希望它是一个单独的交易。
我有以下数据框:
ID Payment 1 Payment 2 Payment 3 Payment 4 Payment 5 Activity
1 10 0 0 0 0 Payment 1
2 0 10 15 0 0 Payment 2, Payment 3
3 10 20 30 0 0 Payment 1, Payment 2, Payment 3
但我希望数据框是:
ID Payment 1 Payment 2 Payment 3 Payment 4 Payment 5 Activity
1 10 0 0 0 0 Payment 1
2 0 10 0 0 0 Payment 2
2 0 0 15 0 0 Payment 3
3 10 0 30 0 0 Payment 1, Payment 3
3 0 20 0 0 0 Payment 2
这里的问题是您想要同时更改Payment
列和Activity
列。 所以实际上,我只看到了根据条件row['Payment 2'] == 0
遍历 DataFrame 并将新行写入新 DataFrame 的幼稚方法,如下所示:
df_new = pd.DataFrame(columns=['ID', 'Payment 1', 'Payment 2', 'Payment 3', 'Payment 4', 'Payment 5', 'Activity'])
for index, row in df.iterrows():
if row['Payment 2'] == 0:
df_new = df_new.append(row)
else:
row_new = pd.DataFrame({'ID':[row['ID']], 'Payment 1':[row['Payment 1']], 'Payment 2':[0], 'Payment 3':[row['Payment 3']], 'Payment 4':[row['Payment 4']], 'Payment 5':[row['Payment 5']], 'Activity':[', '.join([x for x in ['Payment 1', 'Payment 3', 'Payment 4', 'Payment 5'] if row[x] != 0])]})
df_new = df_new.append(row_new)
row_new = pd.DataFrame({'ID':[row['ID']], 'Payment 1':[0], 'Payment 2':[row['Payment 2']], 'Payment 3':[0], 'Payment 4':[0], 'Payment 5':[0], 'Activity':'Payment 2'})
df_new = df_new.append(row_new)
如此,将添加两个新行(一个与Payment 2
只和一个与其他)是否有Payment 2
和原始行从源数据帧追加,如果没有Payment 2
。
有关拆分行的相关问题(仅基于一列而其他列保持不变):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.