Python 更新/附加数据帧

Python 更新/附加数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个类似于这个数据框的东西(简化): 我需要从不同的报告中更新此数据帧。第一个报告应该创建一个新行(存储和日期),并填写客户和购买的物品数据。另一份报告提供成本数据等。报告出现的顺序会发生变化。 所以底线是:有时一个新报告应该更新已经存在的行,有时创建一个新的行。 因此,我正在寻找一段代码,可以做到这一点。当然,我可以结合使用切片、if、追加等,但我觉得应该有更好的解决方案。 我想Store和Date应该用作多索引(在我的例子中,组合是唯一的),但我不能再进一步了。您想要的神奇功能是pd.D

我有一个类似于这个数据框的东西(简化):

我需要从不同的报告中更新此数据帧。第一个报告应该创建一个新行(存储和日期),并填写客户和购买的物品数据。另一份报告提供成本数据等。报告出现的顺序会发生变化。 所以底线是:有时一个新报告应该更新已经存在的行,有时创建一个新的行。 因此,我正在寻找一段代码,可以做到这一点。当然,我可以结合使用切片、if、追加等,但我觉得应该有更好的解决方案。
我想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