Python 向组的一个成员添加值的数据帧
我们有以下数据帧(Python 向组的一个成员添加值的数据帧,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我们有以下数据帧(df),它有3列。目标是确保基于IDs的每个组的“负载”总和等于1。我想我们可以使用groupby Num ID加载 1 AEC 0.2093275 2 AEC 0.5384086 3 CIZ 0.1465657 4 CIZ 0.7465657 5 CIZ 0.1465657 如果一个组的总负载小于1,我们希望在不向数据帧添加额外行的情况下(仅通过修改值),从组中添加或减去(通过添加或减去所有(按比例)或组中一个成员的负载),使总和等于1 非常感谢您的帮助,特别是在问题的第二
df
),它有3列。目标是确保基于IDs的每个组的“负载”总和等于1。我想我们可以使用groupby
Num ID加载
1 AEC 0.2093275
2 AEC 0.5384086
3 CIZ 0.1465657
4 CIZ 0.7465657
5 CIZ 0.1465657
如果一个组的总负载小于1,我们希望在不向数据帧添加额外行的情况下(仅通过修改值),从组中添加或减去(通过添加或减去所有(按比例)或组中一个成员的负载),使总和等于1
非常感谢您的帮助,特别是在问题的第二部分。
提前谢谢大家
import pandas as pd
data = [
['AEC', 0.2093275],
['AEC', 0.5384086],
['CIZ', 0.1465657],
['CIZ', 0.7465657],
['CIZ', 0.1465657],
]
df = pd.DataFrame(data, columns = ['ID', 'Load'])
groups = df.groupby('ID').agg({'ID': 'count', 'Load': 'sum'})
groups = groups.rename(columns = {'ID': 'Count', 'Load': 'Total'}).reset_index()
groups['adjust'] = (1 - groups['Total'])/groups['Count']
df = pd.merge(df, groups, on = 'ID')
df['Load'] = df['Load'] + df['adjust']
df = df.drop(['Total', 'Count', 'adjust'], axis = 1)
print(df)
#output
ID Load
0 AEC 0.335459
1 AEC 0.664541
2 CIZ 0.133333
3 CIZ 0.733333
4 CIZ 0.133333
根据注释更新代码。根据汇总数据框计算调整字段。然后对每组均匀地进行调整。以下是一种解决方案:
import pandas as pd
df = pd.DataFrame([[1, 'AEC', 0.2093275], [2, 'AEC', 0.5384086],
[3, 'CIZ', 0.1465657], [4, 'CIZ', 0.7465657],
[5, 'CIZ', 0.1465657]], columns=['Num', 'ID', 'Load'])
df_grouped = df.groupby('ID').Load.agg(['count', 'sum']).reset_index()
df_grouped['change'] = (1 - df_grouped['sum']) / df_grouped['count']
change_map = df_grouped.set_index('ID')['change'].to_dict()
df.Load = df.Load + df.ID.map(change_map)
# df
# Num ID Load
# 0 1 AEC 0.335459
# 1 2 AEC 0.664541
# 2 3 CIZ 0.133333
# 3 4 CIZ 0.733333
# 4 5 CIZ 0.133333
谢谢这对我不起作用,因为您实际上是在向数据帧添加一行。我想给组中的一个载荷减去或加上一个值,使组总数等于1。你会怎么做?提前非常感谢:)是否可以只添加到每个组中的一个元素,而不是添加/减去每个组中的所有成员?@Ali,当然有可能-请随意提出一个新问题。@jp_data_analysis我在这里添加了一个问题:是否可以只添加到每个组中的一个元素,而不是添加/减去每个组中的所有成员?@Ali,出于兴趣,你为什么不接受这个答案?