Python 枢轴中的重复值
我有两个数据帧Python 枢轴中的重复值,python,python-3.x,pandas,dataframe,pivot,Python,Python 3.x,Pandas,Dataframe,Pivot,我有两个数据帧df1和df2。 一个是客户债务,另一个是客户付款日期 我想创建一个新的数据框,其中包含截至2017年1月01日的当月已支付债务的% 问题在于,一些客户在同一个月内支付了两次,因此存在重复值,pivot无法以这种方式运行,它显示: ValueError:索引包含重复的条目,无法重塑 我如何解决这个问题 谢谢你抽出时间 import pandas as pd d1 = {'client number': ['2', '2','3','6','7','7','8','8','8',
df1
和df2
。
一个是客户债务
,另一个是客户付款
日期
我想创建一个新的数据框,其中包含截至2017年1月01日的当月已支付债务的%
问题在于,一些客户在同一个月内支付了两次,因此存在重复值,pivot无法以这种方式运行,它显示:
ValueError:索引包含重复的条目,无法重塑
我如何解决这个问题
谢谢你抽出时间
import pandas as pd
d1 = {'client number': ['2', '2','3','6','7','7','8','8','8','8','8','8','8','8'],
'month': [1, 2, 3,1,10,12,3,5,8,1,1,4,5,8],
'year':[2013,2013,2013,2019,2013,2013,2013,2013,2013,2014,2014,2015,2016,2017],
'payment' :[100,100,200,10000,200,100,300,500,200,100,200,200,500,50]}
df1 = pd.DataFrame(data=d1).set_index('client number')
d2 = {'client number': ['2','3','6','7','8'],
'debt': [200, 600,10000,300,3000]}
df2 = pd.DataFrame(data=d2)
df2 = df2.set_index('client number')
df1['pct'] = df1['payment'].div(df1.index.map(df2['debt'])).round(2)
df1['date'] = df1['year'].astype(str) + '-' + df1['month'].astype(str).str.zfill(2)
df3 = df2.join(df1.pivot(columns='date', values='pct').fillna(0)).reset_index()
与agg_func='sum'
一起使用,因为可以将每月债务付款的分数相加:
df3 = (
df2.join(
df1.pivot_table(index=df1.index, columns='date', values='pct', aggfunc='sum').fillna(0))
.reset_index()
)
结果:
# print(df3)
client number debt 2013-01 2013-02 2013-03 2013-05 2013-08 2013-10 2013-12 2014-01 2015-04 2016-05 2017-08 2019-01
0 2 200 0.5 0.5 0.00 0.00 0.00 0.00 0.00 0.0 0.00 0.00 0.00 0.0
1 3 600 0.0 0.0 0.33 0.00 0.00 0.00 0.00 0.0 0.00 0.00 0.00 0.0
2 6 10000 0.0 0.0 0.00 0.00 0.00 0.00 0.00 0.0 0.00 0.00 0.00 1.0
3 7 300 0.0 0.0 0.00 0.00 0.00 0.67 0.33 0.0 0.00 0.00 0.00 0.0
4 8 3000 0.0 0.0 0.10 0.17 0.07 0.00 0.00 0.1 0.07 0.17 0.02 0.0
您可以改用
pivot\u表
。这允许您应用函数来聚合重复条目。例如,可以取重复值的最大值。另外,似乎您应该在这个函数调用中包含索引
参数。将原来的pivot
调用替换为以下内容:
df1.pivot_table(columns='date', index='client number', values='pct', aggfunc='max').fillna(0)
您希望如何处理重复的值?平均他们,加上他们?此外,预期的产出也很有用。