Python 更新/附加数据帧
我有一个类似于这个数据框的东西(简化): 我需要从不同的报告中更新此数据帧。第一个报告应该创建一个新行(存储和日期),并填写客户和购买的物品数据。另一份报告提供成本数据等。报告出现的顺序会发生变化。 所以底线是:有时一个新报告应该更新已经存在的行,有时创建一个新的行。 因此,我正在寻找一段代码,可以做到这一点。当然,我可以结合使用切片、if、追加等,但我觉得应该有更好的解决方案。Python 更新/附加数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个类似于这个数据框的东西(简化): 我需要从不同的报告中更新此数据帧。第一个报告应该创建一个新行(存储和日期),并填写客户和购买的物品数据。另一份报告提供成本数据等。报告出现的顺序会发生变化。 所以底线是:有时一个新报告应该更新已经存在的行,有时创建一个新的行。 因此,我正在寻找一段代码,可以做到这一点。当然,我可以结合使用切片、if、追加等,但我觉得应该有更好的解决方案。 我想Store和Date应该用作多索引(在我的例子中,组合是唯一的),但我不能再进一步了。您想要的神奇功能是pd.D
我想Store和Date应该用作多索引(在我的例子中,组合是唯一的),但我不能再进一步了。您想要的神奇功能是
pd.DataFrame.combine\u first
报告
报告1和2 添加行 补缺
颠倒顺序;报告2然后报告1 添加行 补缺
只是一个建议,我不知道这是否有用。考虑到您的需求,您应该使用字典,其中存储和日期应该一起构成您的键,并且您可以将其余数据作为值放在列表形式中。易于更新和更换。希望能有帮助
import pandas as pd
import datetime as dt
date=dt.date(2018,1,18)
purchase_1 = pd.Series({'Store':'Store 1','Date': date,
'Item Purchased': 'Dog Food',
'Cost': 22.50,'Client':'Mark'})
purchase_2 = pd.Series({'Store':'Store 2','Date': date,
'Item Purchased': 'Kitty Litter',
'Cost': 2.50,'Client':'Den'})
purchase_3 = pd.Series({'Store':'Store 3','Date': date,
'Item Purchased': 'Bird Seed',
'Cost': 5.00,'Client':'Max'})
df = pd.DataFrame([purchase_1, purchase_2, purchase_3])
df = df.set_index(['Store', 'Date'])
df.index.names = ['Store', 'Date']
Store Date Client Cost Item Purchased
Store 1 2018-01-18 Mark 22.5 Dog Food
Store 2 2018-01-18 Den 2.5 Kitty Litter
Store 3 2018-01-18 Max 5.0 Bird Seed
report1 = pd.DataFrame({
'Client': ['Sean'], 'Item Purchased': ['Hamster Chew']
}, pd.MultiIndex.from_tuples([('Store 4', date)], names=df.index.names))
report1
Client Item Purchased
Store Date
Store 4 2018-01-18 Sean Hamster Chew
report2 = pd.DataFrame({
'Cost': [3.14]
}, pd.MultiIndex.from_tuples([('Store 4', date)], names=df.index.names))
report2
Cost
Store Date
Store 4 2018-01-18 3.14
df.combine_first(report1)
Client Cost Item Purchased
Store Date
Store 1 2018-01-18 Mark 22.5 Dog Food
Store 2 2018-01-18 Den 2.5 Kitty Litter
Store 3 2018-01-18 Max 5.0 Bird Seed
Store 4 2018-01-18 Sean NaN Hamster Chew
df.combine_first(report1).combine_first(report2)
Client Cost Item Purchased
Store Date
Store 1 2018-01-18 Mark 22.50 Dog Food
Store 2 2018-01-18 Den 2.50 Kitty Litter
Store 3 2018-01-18 Max 5.00 Bird Seed
Store 4 2018-01-18 Sean 3.14 Hamster Chew
df.combine_first(report2)
Client Cost Item Purchased
Store Date
Store 1 2018-01-18 Mark 22.50 Dog Food
Store 2 2018-01-18 Den 2.50 Kitty Litter
Store 3 2018-01-18 Max 5.00 Bird Seed
Store 4 2018-01-18 NaN 3.14 NaN
df.combine_first(report2).combine_first(report1)
Client Cost Item Purchased
Store Date
Store 1 2018-01-18 Mark 22.50 Dog Food
Store 2 2018-01-18 Den 2.50 Kitty Litter
Store 3 2018-01-18 Max 5.00 Bird Seed
Store 4 2018-01-18 Sean 3.14 Hamster Chew