繁体   English   中英

如何根据列值拆分数据框中的行?

[英]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.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM