我想通过存储在每个ID组的另一列中的状态来计算值的差异。
数据集为:
# Create the dataframe
d = {'ID': ['1', '1', '1', '1', '2', '2', '2', '2'],
'Category': ['A','B','C','D','A','B','C','D'],
'Value': ['5','9','10','11','8','13','20','25']}
df = pd.DataFrame(data=d)
数据集如下:
ID Category Value
1 A 5
1 B 9
1 C 10
1 D 11
2 A 8
2 B 13
2 C 20
2 D 25
例如,我想为每个ID计算类别B和D的值的差异。但是我不确定如何将计算与groupby相结合。
理想的数据集如下:
ID diff(B,D)
1 2
2 12
感谢任何人回答这个问题!
答案 0 :(得分:1)
使用groupby
过滤后,您可以使用diff
和isin
df.Value=pd.to_numeric(df.Value)
yourdf=df.loc[df['Category'].isin(['B','D'])].set_index('ID').groupby(level=0)['Value'].diff().dropna()
yourdf
Out[75]:
ID
1 2.0
2 12.0
Name: Value, dtype: float64
答案 1 :(得分:0)
另一种解决方法是使用MultiIndex
df2 = df.set_index(['ID', 'Category']).unstack(-1).xs('Value', axis=1, drop_level=True)
Category A B C D
ID
1 5 9 10 11
2 8 13 20 25
df2 = df2.apply(pd.to_numeric)
df2['D'] - df2['B']
ID
1 2
2 12
dtype: int64
答案 2 :(得分:-1)
您还可以尝试使用pivot_table
,然后尝试以下差异的传统公式:
d = {'ID': ['1', '1', '1', '1', '2', '2', '2', '2'],
'Category': ['A','B','C','D','A','B','C','D'],
'Value': ['5','9','10','11','8','13','20','25']}
df = pd.DataFrame(data=d)
df.Value=pd.to_numeric(df.Value)
aa = df['Category'].unique()
# using a pivot table function to define in the column and then calculating the difference
df = df.pivot_table(index=['ID'],columns='Category',values='Value')
df['diff'] = df['D'] - df['B']
df = df.drop(columns=aa,axis=0)
output:
Category diff
ID
1 2
2 12
请告诉我它是否对您有用。