【问题标题】:Pandas group and join熊猫组并加入
【发布时间】:2019-03-11 12:44:11
【问题描述】:

我是熊猫新手。我想分析以下案例。比方说,水果市场每天从 18:00 到 22:00 给出水果的价格。他们每半小时更新一次时间实验室之间的水果价格。考虑市场在 18:00 给出的水果价格如下,

Fruit    Price
Apple     10
Banana    20

18:30半小时后,名单更新如下,

Fruit    Price
Apple     10
Banana    21
Orange    30
Grapes    25
Pineapple 65

我想查看最近[18:30] 的水果价格与之前[18:00] 的水果价格是否发生了变化。 在这里我想得到结果,

Fruit   18:00   18:30
Banana    20     21

为了解决这个问题,我正在考虑执行以下操作,

1) Add time column in the two data frames.
2) Merge the tables into one.
3) Make a Pivot table with Index Fruit name and Column as ['Time','Price']. 

我不知道如何让按时间分组的两个数据框相交。如何获取两个DataFrame的共同行。

【问题讨论】:

  • 你能创建时间和更新时间吗?这样,就可以得到Modified Fruit的值了。
  • 您无需转身。只需将每个数据帧的价格 col 重命名为适当的时间,然后在 pd.merge 中执行“外部连接”作为参数

标签: python pandas


【解决方案1】:

在这种情况下您不需要进行旋转,我们可以简单地使用 merge 并使用 suffixes 参数来获得所需的结果:

df_update = pd.merge(df, df2, on='Fruit', how='outer', suffixes=['_1800h', '_1830h'])

    Fruit       Price_1800h Price_1830h
0   Apple       10.0        10.0
1   Banana      20.0        21.0
2   Orange      NaN         30.0
3   Grapes      NaN         25.0
4   Pineapple   NaN         65.0

编辑

我们为什么使用outer 参数?我们希望保留在df2 中更新的所有新数据。例如,如果我们使用inner,我们将不会得到更新的水果,如下所示。除非这是 OP 想要的输出,在这种情况下不清楚。

df_update = pd.merge(df, df2, on='Fruit', how='inner', suffixes=['_1800h', '_1830h'])

    Fruit   Price_1800h Price_1830h
0   Apple   10          10.0
1   Banana  20          21.0

【讨论】:

  • 这在这种情况下是行不通的,因为它只会给我们返回两行(苹果、香蕉)而不是更新的其他水果。请参阅我的编辑以获取解释。 @SergeBallesta
  • @Erfan:谢谢你的回答。我从你的回答中学到了新东西。但是只有当合并的数据框有两列同名时才需要后缀。我对吗?如果我有额外的列作为“水果家族”怎么办。它会起作用吗?
  • @SmithDwayne Family of Fruit 也确实会被添加,因为 merge 会带来所有列。顺便说一句,如果它对你有帮助,你可以接受一个正确的答案
【解决方案2】:

如果 Fruit 是您的数据框的索引,则以下代码应该可以工作。想法是返回不等式的行:

df['1800'] = df1['Price']
df['1830'] = df2['Price']
print(df.loc[df['1800'] != df1['1830']])

您也可以使用datetime in your column heading

【讨论】:

  • 对代码的一些解释也对学习者有所帮助。仅代码答案并不总是最有帮助的。请使用edit 按钮添加更多文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 2021-11-19
  • 2021-05-11
  • 2019-01-02
  • 2012-04-04
  • 2023-02-04
相关资源
最近更新 更多