我尝试根据条件减法创建新列。我想先从A列对数据帧进行分组,然后取C的行值,其中B为最小值,并从C列中的所有值中减去该值。
import pandas as pd
data = [
["R", 1, 2],
["R", 2, 4],
["R", 3, 6],
["R", 4, 8],
["S", 0, 5],
["S", 1, 4],
["S", 2, 1],
["S", 3, 3]]
df = pd.DataFrame(data=data, columns=["a", "b", "c"])
df
Out[1]:
a b c
0 R 1 2
1 R 2 4
2 R 3 6
3 R 4 8
4 S 0 5
5 S 1 4
6 S 2 1
7 S 3 3
希望它能够产生一个列' d'的:
Out[2]:
a b c d
0 R 1 2 0
1 R 2 4 2
2 R 3 6 4
3 R 4 8 6
4 S 0 5 0
5 S 1 4 -1
6 S 2 1 -4
7 S 3 3 -2
任何人都有任何好的pythonic方式吗?
由于
答案 0 :(得分:4)
使用
In [591]: df['d'] = df['c'] - df.loc[df.groupby('a')['b'].transform('idxmin'), 'c'].values
In [592]: df
Out[592]:
a b c d
0 R 1 2 0
1 R 2 4 2
2 R 3 6 4
3 R 4 8 6
4 S 0 5 0
5 S 1 4 -1
6 S 2 1 -4
7 S 3 3 -2
答案 1 :(得分:4)
postgres=# select * from customer where customer_id in ();
ERROR: syntax error at or near ")"
答案 2 :(得分:1)
没有退出效率,但工作
df['d']=df.groupby('a').apply(lambda x : x['c']-x['c'][x['b']==x['b'].min()].values).values
df
Out[1305]:
a b c d
0 R 1 2 0
1 R 2 4 2
2 R 3 6 4
3 R 4 8 6
4 S 0 5 0
5 S 1 4 -1
6 S 2 1 -4
7 S 3 3 -2