Python使用重复元素进行绘图
我有一个包含重复项目的csv文件。重复这些项目的原因是,每一行都表示在一段时间内已支付的特定贷款。例如,ID=156的贷款已分5次支付。因此,除了付款金额和付款日期不同之外,贷款信息在每一行中重复。我想制作一个已支付贷款的柱状图,但通过计算已支付贷款的状态行来计算已支付贷款是无效的,因为它计算重复贷款。我想知道我应该如何解决这个问题 这是我的密码:Python使用重复元素进行绘图,python,pandas,bar-chart,Python,Pandas,Bar Chart,我有一个包含重复项目的csv文件。重复这些项目的原因是,每一行都表示在一段时间内已支付的特定贷款。例如,ID=156的贷款已分5次支付。因此,除了付款金额和付款日期不同之外,贷款信息在每一行中重复。我想制作一个已支付贷款的柱状图,但通过计算已支付贷款的状态行来计算已支付贷款是无效的,因为它计算重复贷款。我想知道我应该如何解决这个问题 这是我的密码: loans[loans["status"]=="paid"] ["location.country"].value_counts().plot(ki
loans[loans["status"]=="paid"] ["location.country"].value_counts().plot(kind="bar", fontsize=7)
此代码试图绘制支付贷款的国家,但正如我所说,这是不正确的,因为对于多行重复的贷款,loans[“status”]=“paid”
可能为真,因此,loans[loans[“status”]=“paid”][“location.country”]。value_counts()
是错误的计数
以下是数据外观的示例:
ID status paymentAmount paymentProcessDate Country
156 paid $400 2/12/2009 CountryA
156 paid $123 2/11/2010 CountryA
156 paid $2000 2/09/2011 CountryA
134 unpaid Nan 2/05/2013 CountryB
134 unpaid Nan 2/07/2013 CountryB
这里有一种方法可以过滤掉已经支付的
ID
s
import pandas as pd
from io import StringIO
df = pd.DataFrame.from_csv(StringIO('''ID status paymentAmount paymentProcessDate Country
156 paid $400 2/12/2009 CountryA
156 paid $123 2/11/2010 CountryA
156 paid $2000 2/09/2011 CountryA
134 unpaid Nan 2/05/2013 CountryB
134 unpaid Nan 2/07/2013 CountryB'''), sep=r' +')
paid_ids = df[df.status=='paid'].ID.drop_duplicates()
unpaid = df[~df.ID.isin(paid_ids)]
unpaid.Country.value_counts().plot(kind='bar')
你能举个例子吗?@lanS我更新了这个问题。你可以按
ID
进行分组,然后你可以确保每次贷款只计算一次。这不起作用。实际上,数据的实际格式有100多列,所以为了简单起见,我不想把它们全部放在这里。当我想读取csv文件时,我无法输入所有列的名称。我假设您已经加载了数据;如果将df
替换为loans
后三条语句应该可以执行您想要的操作。我加载的方式是pd.read_csv(),因此没有字段ID。因此,paid_ID=df[df.status=='paid'].ID.drop_duplicates()抛出错误我假设它发生在另一个名称下?如果是这样,您可以调整示例,我将编辑答案。假设我使用此语法loans[“status”]而不是loans.status。AttributeError:“DataFrame”对象没有属性“ID”paid\u ID=loans[loans[“status”]=“paid]”。ID