3 回答
TA贡献1848条经验 获得超5个赞
我认为你可以使用如下:df_card.iterrows
transaction_dict = {}
for i, row in df_card.iterrows():
key = row['unique_mem_id']
val = row['amount']
transaction_dict[key] = transaction_dict.get(key,0) + val
希望它有帮助!
TA贡献1816条经验 获得超6个赞
dic = {}
for i in range(len(df)):
key = df.at[i, 'unique_mem_id']
if df.at[i, 'unique_mem_id'] in dic:
dic[key] += df.at[i, 'description amount']
else:
dic[key] = df.at[i, 'description amount']
试试这个!首先,我们创建一个字典。然后,我们遍历数据帧的每一行,并检查特定是否已经作为键存在于字典中。如果它是一个键,只需将 添加到该键,否则在字典中创建一个新键。unique_mem_iddescription_amount
TA贡献1779条经验 获得超6个赞
为了完成此操作并对第三方有用,我的最终解决方案是:我使用了一个解决方法,这是以下步骤的副产品,但与Yosua发布的解决方案类似。
创建一个新列,将交易记录标记为“费用”或“收入”,然后运行 if 循环,直到它达到第一个“收入”并将其相加。
´
transaction_class_card = pd.Series([], dtype = 'object')
for index, i in enumerate(df_card['transaction_category_name']):
if i in card_inc:
transaction_class_card[index] = "income"
elif i in card_exp:
transaction_class_card[index] = "expense"
else:
transaction_class_card[index] = "NOT_CLASSIFIED"
df_card.insert(loc = len(df_card.columns), column = "transaction_class", value = transaction_class_card)
´
追加新列后,我使用 follow 将行作为元组进行迭代,并在点击“收入”后立即停止,然后将之前的所有“费用”相加。
数据帧切片
df_1 = df_card[['unique_mem_id', 'amount', 'transaction_class']][df_card['unique_mem_id'] == '70850441974905670928446']
使用元组进行迭代
cumulative_amount = []
amount_list = []
for row in df_1.itertuples():
#access data using column names
if row.transaction_class == "expense":
#print(index, row.unique_mem_id, row.amount, row.transaction_class)
amount_list.append(row.amount)
cumulative_amount = np.cumsum(amount_list, axis = 0)
#print(row.unique_mem_id, cumulative_amount)
else:
#print(f"stopped at user_ID: {row.unique_mem_id}, cumulative sum injected {cumulative_amount[-1]}")
break
#print out the member id as part of the for-loop and and the last element of the list which is the amount to be injected
print(f"unique_member_ID: {row.unique_mem_id}; initial injection needed in USD: {cumulative_amount[-1]}")
这将打印各自的member_ID及其费用的总和。希望这些变体有助于:)
添加回答
举报