Python 如何基于列值拆分数据帧中的行?
我试图根据列中是否存在值将行拆分为多行。我可以根据列值进行筛选,但希望根据条件将行拆分为两行,并仅返回行的特定部分。数据框由不同类型的付款组成,活动字段表示发生的付款类型。我想知道什么时候有一个特定的付款类型将行拆分为两个。在下面的示例中,当存在付款2时,我希望它是一个单独的交易 我有以下数据帧:Python 如何基于列值拆分数据帧中的行?,python,pandas,dataframe,split,rows,Python,Pandas,Dataframe,Split,Rows,我试图根据列中是否存在值将行拆分为多行。我可以根据列值进行筛选,但希望根据条件将行拆分为两行,并仅返回行的特定部分。数据框由不同类型的付款组成,活动字段表示发生的付款类型。我想知道什么时候有一个特定的付款类型将行拆分为两个。在下面的示例中,当存在付款2时,我希望它是一个单独的交易 我有以下数据帧: ID Payment 1 Payment 2 Payment 3 Payment 4 Payment 5 Activity 1
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
这里的问题是您希望同时更改
付款
列和活动
列。因此,实际上,我只看到迭代数据帧并根据条件row['Payment 2']==0
将新行写入新数据帧的天真方法,如下所示:
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
,则追加源数据框中的原始行
有关拆分行的相关问题(仅基于一列,不涉及其他列):
付款2“
和”付款2“
执行str.split(expand=True)
。这样,当付款2存在时,您就有一列付款2