Python 使用Pandas的条件数据帧操作
我正在对数据帧Python 使用Pandas的条件数据帧操作,python,numpy,pandas,conditional,dataframe,Python,Numpy,Pandas,Conditional,Dataframe,我正在对数据帧a进行一些计算:我想添加一个新列RESULT,并执行以下计算: 通常有多行具有相同的key1值,它们的key2可以是X或Y。对于具有相同键1的各组: 如果key2=X,则RESULT=0, 否则,RESULT=(C1 | key2=Y)+(C2 | key2=Y)+(C2 | key2=X)。请参见A_MODIFIED A = key1 key2 C1 C2 0 A X 5 2 1
a
进行一些计算:我想添加一个新列RESULT
,并执行以下计算:
通常有多行具有相同的key1
值,它们的key2
可以是X
或Y
。对于具有相同键1的各组:
如果key2=X
,则RESULT=0
,
否则,RESULT=(C1 | key2=Y)+(C2 | key2=Y)+(C2 | key2=X)
。请参见A_MODIFIED
A =
key1 key2 C1 C2
0 A X 5 2
1 A Y 3 2
2 B X 6 1
3 B Y 1 3
4 C Y 1 4
5 D X 2 3
6 D Y 1 3
A_MODIFIED =
key1 key2 C1 C2 RESULT
0 A X 5 2 0
1 A Y 3 2 7
2 B X 6 1 0
3 B Y 1 3 5
4 C Y 1 4 5
5 D X 2 3 0
6 D Y 1 3 7
这就是我所做的:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(A.groupby('key1', sort = False).sum().ix[:, ['C2']].sum(axis=1), columns=['C2_T']).reset_index(level=1)
df2 = A[A['key2'] == 'Y']
df3 = pd.merge(df1, df2, how = 'left').set_index(df1.index)
df3.RESULT = df3.C1+ df3.C2_T
但是现在我不知道如何将它与原始的
A
合并。您可以为每个组应用函数f
函数f
对列C2
的所有值求和,因为不依赖于键2的值。C1
的值取决于key2
,因此只有df['key2']=='Y'
的值被选中
最后一个ifdf['key2']=='X'
输出设置为0
print A
# key1 key2 C1 C2
#0 A X 5 2
#1 A Y 3 2
#2 B X 6 1
#3 B Y 1 3
#4 C Y 1 4
#5 D X 2 3
#6 D Y 1 3
def f(df):
df['RESULT'] = df['C2'].sum() + df['C1'].loc[df['key2'] == 'Y'].sum()
df['RESULT'].loc[df['key2'] == 'X'] = 0
return df
df = A.groupby('key1', sort = False).apply(f)
print df
# key1 key2 C1 C2 RESULT
#0 A X 5 2 0
#1 A Y 3 2 7
#2 B X 6 1 0
#3 B Y 1 3 5
#4 C Y 1 4 5
#5 D X 2 3 0
#6 D Y 1 3 7
您可以为每个组应用函数
f
函数f
对列C2
的所有值求和,因为不依赖于键2的值。C1
的值取决于key2
,因此只有df['key2']=='Y'
的值被选中
最后一个ifdf['key2']=='X'
输出设置为0
print A
# key1 key2 C1 C2
#0 A X 5 2
#1 A Y 3 2
#2 B X 6 1
#3 B Y 1 3
#4 C Y 1 4
#5 D X 2 3
#6 D Y 1 3
def f(df):
df['RESULT'] = df['C2'].sum() + df['C1'].loc[df['key2'] == 'Y'].sum()
df['RESULT'].loc[df['key2'] == 'X'] = 0
return df
df = A.groupby('key1', sort = False).apply(f)
print df
# key1 key2 C1 C2 RESULT
#0 A X 5 2 0
#1 A Y 3 2 7
#2 B X 6 1 0
#3 B Y 1 3 5
#4 C Y 1 4 5
#5 D X 2 3 0
#6 D Y 1 3 7
我认为你的公式没有道理<当
key2=X
时,code>RESULT=0,但是您有…+(C2 | key2=X)
我认为你的公式没有意义<当key2=X
时,code>RESULT=0,但是您有…+(C2 |键2=X)