pandas 基于多个标准将数据切片从 Dataframe 添加到时间序列 Dataframe

de90aj5v  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(92)

我有两个Pandas Dataframe 。df 1是一个时间序列,有6列值,其中一列是“名称”。df 2是一个行列表,每行的“名称”列中有一个唯一的字符串,“日期”列的每行中有一个相同的日期--所有行都有来自同一日期发生的观察的相同日期值。
df1--〉
| 日期|姓名|刻痕|状态1|状态2|挑选|
| - -|- -|- -|- -|- -|- -|
| 2022年1月1日|ABC公司|二十三点三|零点二三四|三十四|不含N|
| 2022年1月2日|ABC公司|二十一点一|零点四三一|十四|不含N|
| 2022年1月3日|ABC公司|二十九点九|一点三一零|四个|不含N|
| 2022年1月4日|ABC公司|11.3节|九、三一零|三个|不含N|
df 1索引为日期
df2--〉
| 索引|日期|姓名|挑选|
| - -|- -|- -|- -|
| 第0页|2022年1月3日|QRS波|二十三点三|
| 一个|2022年1月3日|ABC公司|二十一点一|
| 2个|2022年1月3日|数据库管理员|二十九点九|
| 三个|2022年1月3日|KLL语言|11.3节|
我想将df 2中的行合并/添加到df 1中符合“name”和“date”条件的行。
我已经审查了许多文章在这里和其他地方以及尝试。合并如下:

df3['pick'] = pd.merge(df1, df2, how='outer', on=['name'])

成功是让df 2或新的df 3看起来像这样:
| 日期|姓名|刻痕|状态1|状态2|挑选|
| - -|- -|- -|- -|- -|- -|
| 2022年1月1日|ABC公司|二十三点三|零点二三四|三十四|不含N|
| 2022年1月2日|ABC公司|二十一点一|零点四三一|十四|不含N|
| 2022年1月3日|ABC公司|二十九点九|一点三一零|四个|二十一点一|
| 2022年1月4日|ABC公司|11.3节|九、三一零|三个|不含N|
其中df 1根据df 2中的相关行更新,或者新的df 3是df 1和df 2的结果组合,其中插入了“pick”值21.1以匹配相应的日期和名称。
如蒙指导,不胜感激。

cuxqih21

cuxqih211#

试试这个:

df3 = pd.merge(df1,df2, how='left', left_on=['Date','name'], right_on=['Date','name'])
bq3bfh9z

bq3bfh9z2#

df1 = df1.merge(df2, how='left', on=['Date', 'name']) # what this line does is it merges df1 and df2 based on the 'Date' and 'name' columns. The resulting df1 has the 'pick' column from df2 appended to it.
df1['pick'] = df1['pick_y'].fillna(df1['pick_x']) # this line replaces the NaN values in the 'pick' column with the values from the 'pick_x' column.
df1 = df1.drop(['pick_x', 'pick_y', 'index'], axis=1) # this line drops the 'pick_x', 'pick_y' and 'index' columns as they are no longer needed.

输出:

Date name score  stat1 stat2  pick
0  2022-1-1  ABC  23.3  0.234    34   NaN
1  2022-1-2  ABC  21.1  0.431    14   NaN
2  2022-1-3  ABC  29.9   1.31     4  21.1
3  2022-1-4  ABC  11.3   9.31     3   NaN

相关问题