0
  • I have a list of dictionary as show below
[{'Transaction_Date': '23/02/22', 'Particulars': 'UPI-RAJESHKUMAR KANOJIA-O112254823B@MAIR', 'Cheque Number': '205482165529', 'ValueDate': '23/02/22', 'Debit': '189', 'Credit': nan, 'Balance': 1939.24, 'IsTransactionStart': True, 'TransactionId': 1}, 
{'Transaction_Date': nan, 'Particulars': 'TEL-AIRP0000001-205482165529-PAYMENT MAD', 'Cheque Number': nan, 'ValueDate': nan, 'Debit': nan, 'Credit': nan, 'Balance': nan, 'IsTransactionStart': False, 'TransactionId': 1}, 
{'Transaction_Date': nan, 'Particulars': 'E TO ME', 'Cheque Number': nan, 'ValueDate': nan, 'Debit': nan, 'Credit': nan, 'Balance': nan, 'IsTransactionStart': False, 'TransactionId': 1}, 
{'Transaction_Date': '24/02/22', 'Particulars': 'UPI-ADD MONEY TO WALLET-ADD-MONEY@PAYTM-', 'Cheque Number': '205599473326', 'ValueDate': '24/02/22', 'Debit': '602', 'Credit': nan, 'Balance': 1337.24, 'IsTransactionStart': True, 'TransactionId': 2}, 
{'Transaction_Date': nan, 'Particulars': 'PYTM0123456-205599473326-NA', 'Cheque Number': nan, 'ValueDate': nan, 'Debit': nan, 'Credit': nan, 'Balance': nan, 'IsTransactionStart': False, 'TransactionId': 2}, 
{'Transaction_Date': '24/02/22', 'Particulars': '.ACH DEBIT RETURN CHARGES 020222 020222-', 'Cheque Number': 'MIR2205429451991', 'ValueDate': '24/02/22', 'Debit': '531', 'Credit': nan, 'Balance': 806.24, 'IsTransactionStart': True, 'TransactionId': 3}, 
{'Transaction_Date': nan, 'Particulars': 'MIR2205429451991', 'Cheque Number': nan, 'ValueDate': nan, 'Debit': nan, 'Credit': nan, 'Balance': nan, 'IsTransactionStart': False, 'TransactionId': 3}]
  • Is there a way to combine list of dictionary with same TransactionId and make a new list as in the expected output.
  • Expected Output
[{'Transaction_Date': '23/02/22', 'Particulars': 'UPI-RAJESHKUMAR KANOJIA-O112254823B@MAIR TEL-AIRP0000001-205482165529-PAYMENT MAD E TO ME', 'Cheque Number': '205482165529', 'ValueDate': '23/02/22', 'Debit': '189', 'Credit': nan, 'Balance': 1939.24, 'IsTransactionStart': True, 'TransactionId': 1}, 
{'Transaction_Date': '24/02/22', 'Particulars': 'UPI-ADD MONEY TO WALLET-ADD-MONEY@PAYTM-PYTM0123456-205599473326-NA', 'Cheque Number': '205599473326', 'ValueDate': '24/02/22', 'Debit': '602', 'Credit': nan, 'Balance': 1337.24, 'IsTransactionStart': True, 'TransactionId': 2}, 
{'Transaction_Date': '24/02/22', 'Particulars': '.ACH DEBIT RETURN CHARGES 020222 020222-MIR2205429451991', 'Cheque Number': 'MIR2205429451991', 'ValueDate': '24/02/22', 'Debit': '531', 'Credit': nan, 'Balance': 806.24, 'IsTransactionStart': True, 'TransactionId': 3}, 
0

1 Answer 1

2

You can use pandas for this:

import pandas as pd
import numpy as np

data = [{'Transaction_Date': '23/02/22', 'Particulars': 'UPI-RAJESHKUMAR KANOJIA-O112254823B@MAIR', 'Cheque Number': '205482165529', 'ValueDate': '23/02/22', 'Debit': '189', 'Credit': np.nan, 'Balance': 1939.24, 'IsTransactionStart': True, 'TransactionId': 1}, 
{'Transaction_Date': np.nan, 'Particulars': 'TEL-AIRP0000001-205482165529-PAYMENT MAD', 'Cheque Number': np.nan, 'ValueDate': np.nan, 'Debit': np.nan, 'Credit': np.nan, 'Balance': np.nan, 'IsTransactionStart': False, 'TransactionId': 1}, 
{'Transaction_Date': np.nan, 'Particulars': 'E TO ME', 'Cheque Number': np.nan, 'ValueDate': np.nan, 'Debit': np.nan, 'Credit': np.nan, 'Balance': np.nan, 'IsTransactionStart': False, 'TransactionId': 1}, 
{'Transaction_Date': '24/02/22', 'Particulars': 'UPI-ADD MONEY TO WALLET-ADD-MONEY@PAYTM-', 'Cheque Number': '205599473326', 'ValueDate': '24/02/22', 'Debit': '602', 'Credit': np.nan, 'Balance': 1337.24, 'IsTransactionStart': True, 'TransactionId': 2}, 
{'Transaction_Date': np.nan, 'Particulars': 'PYTM0123456-205599473326-NA', 'Cheque Number': np.nan, 'ValueDate': np.nan, 'Debit': np.nan, 'Credit': np.nan, 'Balance': np.nan, 'IsTransactionStart': False, 'TransactionId': 2}, 
{'Transaction_Date': '24/02/22', 'Particulars': '.ACH DEBIT RETURN CHARGES 020222 020222-', 'Cheque Number': 'MIR2205429451991', 'ValueDate': '24/02/22', 'Debit': '531', 'Credit': np.nan, 'Balance': 806.24, 'IsTransactionStart': True, 'TransactionId': 3}, 
{'Transaction_Date': np.nan, 'Particulars': 'MIR2205429451991', 'Cheque Number': np.nan, 'ValueDate': np.nan, 'Debit': np.nan, 'Credit': np.nan, 'Balance': np.nan, 'IsTransactionStart': False, 'TransactionId': 3}]

df = pd.DataFrame(data)
# groupby TransactionID, keep all first column items, except for Particulars - join that one
df = df.groupby('TransactionId', as_index=False).agg({'Transaction_Date': 'first', 'Particulars': '-'.join, 'Cheque Number':'first', 'ValueDate':'first', 'Debit':'first', 'Credit':'first', 'Balance':'first', 'IsTransactionStart':'first', 'TransactionId':'first'})

Ouput:

Transaction_Date Particulars Cheque Number ValueDate Debit Credit Balance IsTransactionStart TransactionId
0 23/02/22 UPI-RAJESHKUMAR KANOJIA-O112254823B@MAIR-TEL-AIRP0000001-205482165529-PAYMENT MAD-E TO ME 205482165529 23/02/22 189 nan 1939.24 True 1
1 24/02/22 UPI-ADD MONEY TO WALLET-ADD-MONEY@PAYTM--PYTM0123456-205599473326-NA 205599473326 24/02/22 602 nan 1337.24 True 2
2 24/02/22 .ACH DEBIT RETURN CHARGES 020222 020222--MIR2205429451991 MIR2205429451991 24/02/22 531 nan 806.24 True 3

Convert back to dict:

df.to_dict(orient='records')
Sign up to request clarification or add additional context in comments.

2 Comments

if i don't know the name of the columns always, can i make it dynamic? And also if there are other overflowing columns, how that can be handled here as for now we are performing join only on a single column.
@donny try this: df = df.groupby('TransactionId').agg(lambda x: '-'.join(map(str, filter(pd.notnull,x))))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.