【发布时间】:2021-10-13 11:35:07
【问题描述】:
我给出了以下熊猫数据框:
d = {'ID': ['1169', '1234', '2456', '9567', '1234', '4321', '9567', '0169'], 'YEAR': ['2001', '2013', '2009', '1989', '2012', '2013', '2002', '2012'], 'VALUE': [8, 24, 50, 75, 3, 6, 150, 47]}
df = pd.DataFrame(data=d)
print(df)
ID YEAR VALUE
0 1169 2001 8
1 1234 2013 24
2 2456 2009 50
3 9567 1989 75
4 1234 2012 3
5 4321 2013 6
6 9567 2002 150
7 1169 2012 47
我现在想合并两行 DataFrame,其中有两个不同的 ID,最终只剩下一个。仅当“YEAR”列的值匹配时才应进行合并。应添加“VALUE”列的值。
输出应如下所示:
ID YEAR VALUE
0 1169 2001 8
1 1234 2013 30
2 2456 2009 50
3 9567 1989 75
4 1234 2012 3
5 9567 2002 150
6 1169 2012 47
第 1 行和第 5 行已合并。第 5 行已删除,第 1 行仍保留之前的 ID,但已添加第 1 行和第 5 行的 VALUE。
我想稍后指定应该合并哪两行或哪两个 ID。两者之一应始终保留。要合并的两个 ID 来自另一个函数。
我尝试了 groupby() 函数,但我不知道如何在那里合并两个不同的 ID。我只使用“ID”列的相同值来管理它。然后看起来像这样:
df.groupby(['ID', 'YEAR'])['VALUE'].sum().reset_index(name ='VALUE')
不幸的是,即使经过大量搜索,我也没有找到任何合适的东西。如果有人可以帮助我,我会很高兴!我想稍后将整个内容应用于具有更多行的更大的 DataFrame。提前致谢并致以最诚挚的问候!
【问题讨论】:
-
所以换句话说,第二个 ID (
4321) 应该在输出中被抑制,有利于胜过1234。算法应该如何决定结果是哪个 ID? -
@hc_dev 我将从另一个函数中手动传递两个要合并的 ID!也许可以指定应该留下传递的第一个ID?我对想法持开放态度!
-
@hc_dev 后面的DataFrame会有几千行,有很多不同的ID,两个不同的ID总是要合并的,它们的位置是随机的。
标签: python pandas dataframe replace merge