如何将具有给定值的列添加到Pandas数据框中,并按另一列分组?

vq8itlhq  于 2023-04-19  发布在  其他
关注(0)|答案(2)|浏览(134)

我有两个Pandas Dataframe :

print(df_a)
   ID  irrelevant_value
0   1  1.2
1   1  2.3
2   1  0.9
3   1  1.1
4   2  2.7
5   2  3.1
6   3  1.3
7   3  0.2
8   3  2.3
...

ID  add_these_values_to_the_same_ID
0   1   100
1   2   120
2   3   90
...

我想把它们结合起来,这样-期望的结果:

print(df_a)

    ID  irrelevant_value  add_these_values_to_the_same_ID
0   1   1.2               100
1   1   2.3               100
2   1   0.9               100
3   1   1.1               100
4   2   2.7               120
5   2   3.1               120
6   3   1.3               90
7   3   0.2               90
8   3   2.3               90
...

如何才能做到这一点?
我一直在与df_a.groupby([“ID”])作斗争,但找不到前进的方向。

c0vxltue

c0vxltue1#

这里不需要groupby函数;相反,只需使用merge。正如这些文档中所述,
如果两个键列都包含键为空值的行,则这些行将相互匹配。这与通常的SQL连接行为不同,可能会导致意外结果。
而且你的两个 Dataframe 都包含ID。因此,你可以用下面的代码合并 Dataframe (这只是一种方法,但它确实有效):

import pandas as pd

# Example dataframes - these might be defined elsewhere in your situation
data_a = {'ID': [1, 1, 1, 1, 2, 2, 3, 3, 3],
          'irrelevant_value': [1.2, 2.3, 0.9, 1.1, 2.7, 3.1, 1.3, 0.2, 2.3]}
df_a = pd.DataFrame(data_a)

data_b = {'ID': [1, 2, 3],
          'add_these_values_to_the_same_ID': [100, 120, 90]}
df_b = pd.DataFrame(data_b)

# Merge dataframes on the 'ID' column
result = df_a.merge(df_b, on='ID')

print(result)

真正重要的一行是:

result = df_a.merge(df_b, on='ID')

这将输出:

ID  irrelevant_value  add_these_values_to_the_same_ID
0   1               1.2                             100
1   1               2.3                             100
2   1               0.9                             100
3   1               1.1                             100
4   2               2.7                             120
5   2               3.1                             120
6   3               1.3                              90
7   3               0.2                              90
8   3               2.3                              90

这应该可以工作,但如果您的数据不适用于此方法,您可以查看how
how{‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’},默认inner要执行的合并类型。

  • left:只使用左帧的键,类似于SQL左外连接;保持密钥顺序。
  • right:只使用右帧中的键,类似于SQL右外连接;保持密钥顺序。
  • outer:使用来自两个帧的键的联合,类似于SQL全外连接;按字典顺序对键排序。
  • inner:使用两个帧的键的交集,类似于SQL内部连接;保持左键的顺序。
  • cross:从两个帧创建笛卡尔积,保留左键的顺序。

outer可以工作,如果上面的代码不工作。

g0czyy6m

g0czyy6m2#

尝试:dataframe.merge

df_a.merge(other_df, left_on = 'ID', right_on = 'ID')

相关问题