如何根据另一列中的重复值在一列中添加行,并最终将第一行保留在python?
How to add rows in one column based on repeated values in another column , and finally keep the first row in python?
我是 python pandas 模块的新手。
假设我有一个数据框或table如下:
df = pd.DataFrame({
'Column A': [12,12,12, 15, 16, 141, 141, 141, 141],
'Column B':['Apple' ,'Apple' ,'Apple' , 'Red', 'Blue', 'Yellow', 'Yellow', 'Yellow', 'Yellow'],
'Column C':[100, 50, np.nan , 23 , np.nan , 199 , np.nan , 1,np.nan]
})
或者我有一个数据table如下:
| Column A | Column B |Column C
----| -------- | ---------|--------
0 | 12 | Apple |100
1 | 12 | Apple |50
2 | 12 | Apple |NaN
3 | 15 | Red |23
4 | 16 | Blue |NaN
5 | 141 | Yellow |199
6 | 141 | Yellow |NaN
7 | 141 | Yellow |1
8 | 141 | Yellow |NaN
如果A列中的值重复,则将相应的值添加到C列中,并将总和粘贴到新的D列中(例如,12有3行,因此我们应该添加相应的值100 + 50 + NaN,求和结果150应存储在新列D)。
如果A列的值不重复,直接在新的D列(比如第3行)粘贴C列的值,但是对于NaN,应该是0(比如第4行)
你能帮我在 python jupyter notebook 中得到这样的输出吗:
| Column A | Column B |Column C |Column D
----- | -------- | ---------|---------|---------
0 | 12 | Apple |100 |150
1 | 15 | Red |23 |23
2 | 16 | Blue |NaN |0
3 | 141 | Yellow |199 |200
df.groupby("Column A", as_index=False).agg(B=("Column B", "first"),
C=("Column C", "first"),
D=("Column C", "sum"))
# Column A B C D
# 0 12 Apple 100.0 150.0
# 1 15 Red 23.0 23.0
# 2 16 Blue NaN 0.0
# 3 141 Yellow 199.0 200.0
df = df.set_index(df['Column A']).drop('Column A', axis=1)
df['Column D'] = df.groupby('Column A')['Column C'].sum()
df = df.drop_duplicates(subset=['Column B'])
这是一种方法
df['Column D'] = df.groupby('Column A')['Column C'].transform('sum')
df = df.drop_duplicates('Column A')
groupby('Column A')
为 Column A
中的每个唯一值创建了一组行。然后 ['Column C'].transform('sum')
为该组中的所有行添加 C 值。
这个总和被保存到 D 列,然后我们可以删除重复项,只保留第一个
此解决方案中有一些假设。它会将 A 中的所有 12
值组合在一起,即使它们彼此不正确,这可能是也可能不是您想要的。
我是 python pandas 模块的新手。
假设我有一个数据框或table如下:
df = pd.DataFrame({
'Column A': [12,12,12, 15, 16, 141, 141, 141, 141],
'Column B':['Apple' ,'Apple' ,'Apple' , 'Red', 'Blue', 'Yellow', 'Yellow', 'Yellow', 'Yellow'],
'Column C':[100, 50, np.nan , 23 , np.nan , 199 , np.nan , 1,np.nan]
})
或者我有一个数据table如下:
| Column A | Column B |Column C
----| -------- | ---------|--------
0 | 12 | Apple |100
1 | 12 | Apple |50
2 | 12 | Apple |NaN
3 | 15 | Red |23
4 | 16 | Blue |NaN
5 | 141 | Yellow |199
6 | 141 | Yellow |NaN
7 | 141 | Yellow |1
8 | 141 | Yellow |NaN
如果A列中的值重复,则将相应的值添加到C列中,并将总和粘贴到新的D列中(例如,12有3行,因此我们应该添加相应的值100 + 50 + NaN,求和结果150应存储在新列D)。
如果A列的值不重复,直接在新的D列(比如第3行)粘贴C列的值,但是对于NaN,应该是0(比如第4行)
你能帮我在 python jupyter notebook 中得到这样的输出吗:
| Column A | Column B |Column C |Column D
----- | -------- | ---------|---------|---------
0 | 12 | Apple |100 |150
1 | 15 | Red |23 |23
2 | 16 | Blue |NaN |0
3 | 141 | Yellow |199 |200
df.groupby("Column A", as_index=False).agg(B=("Column B", "first"),
C=("Column C", "first"),
D=("Column C", "sum"))
# Column A B C D
# 0 12 Apple 100.0 150.0
# 1 15 Red 23.0 23.0
# 2 16 Blue NaN 0.0
# 3 141 Yellow 199.0 200.0
df = df.set_index(df['Column A']).drop('Column A', axis=1)
df['Column D'] = df.groupby('Column A')['Column C'].sum()
df = df.drop_duplicates(subset=['Column B'])
这是一种方法
df['Column D'] = df.groupby('Column A')['Column C'].transform('sum')
df = df.drop_duplicates('Column A')
groupby('Column A')
为 Column A
中的每个唯一值创建了一组行。然后 ['Column C'].transform('sum')
为该组中的所有行添加 C 值。
这个总和被保存到 D 列,然后我们可以删除重复项,只保留第一个
此解决方案中有一些假设。它会将 A 中的所有 12
值组合在一起,即使它们彼此不正确,这可能是也可能不是您想要的。