【问题标题】:How to conditionally append pandas series to another data frame [duplicate]如何有条件地将熊猫系列附加到另一个数据框[重复]
【发布时间】:2019-08-12 12:53:29
【问题描述】:

我有两个数据框,一个是出生的人的名字和他们在每一年(1880-2017)的频率。

name    gender  frequency  year
Mary       F       7065    1880
Anna       F       2604    1880
Emma       F       2003    1880
Elizabeth  F       1939    1880
Minnie     F       1746    1880
...

另一个是年份和出生总数(1880-2017)。

 birth_year    Male    Female   Total
     1880     118400    97605  216005
     1881     108282    98855  207137
     1882     122031   115695  237726
     1883     112477   120059  232536
     1884     122738   137586  260324
...

这些数据框的大小不同,但如果出生年份相同,我想将第二个数据框的列附加到第一个数据框,以包括人口百分比。我想做这样的事情:

for i in range(len(all_names_nat_DF)):
    for j in range(len(total_births)):
        if all_names_nat_DF['year'][i] == total_births['birth_year']:
            all_names_nat_DF.append(total_births['birth_year'][j])

但是这样我得到了错误ValueError: Can only compare identically-labeled Series objects

【问题讨论】:

  • 尝试合并。
  • 您正在寻找的是joining 的概念,它与key column 上的数据帧匹配,在您的情况下为birth_year。在 pandas 中,我们为此使用 merge。我链接了一个很好的问答来解释这个概念。

标签: python pandas dataframe join append


【解决方案1】:

你会想使用df.merge:

df

    name gender frequency year
0   Mary    F   7065    1880
1   Anna    F   2604    1880
2   Emma    F   2003    1880
3   Eliz    F   1939    1880
4   Minnie  F   1746    1880


births

  birth_year  Male  Female  Total
0   1880    118400  97605   216005
1   1881    108282  98855   207137
2   1882    122031  115695  237726
3   1883    112477  120059  232536
4   1884    122738  137586  260324

df.merge(births, how='inner', left_on='year', right_on='birth_year')

    name gender frequency year birth_year Male  Female  Total
0   Mary    F   7065    1880    1880    118400  97605   216005
1   Anna    F   2604    1880    1880    118400  97605   216005
2   Emma    F   2003    1880    1880    118400  97605   216005
3   Eliz    F   1939    1880    1880    118400  97605   216005
4   Minnie  F   1746    1880    1880    118400  97605   216005

【讨论】:

  • Ishan Saraswat 看起来很有效,谢谢!请问你是怎么知道左年加入右出生年的?出于某种原因,这对我来说并不直观。
  • @NathanCahn left_onright_on 参数仅表示要加入的列或索引级别名称。如果左侧和右侧数据框都有一个名为“年份”的列,您可以简单地使用 on 参数 (on='year')。在这种情况下,“左”数据框将是您调用合并的数据框,因此df.merge(births....) df 行中的左数据框是左数据框,而births 是右数据框。参考:pandas.pydata.org/pandas-docs/stable/reference/api/…
  • 解决了,谢谢你的帮助!
猜你喜欢
  • 2021-12-22
  • 2020-10-04
  • 2021-09-24
  • 2020-04-23
相关资源
最近更新 更多