根据另一列中的值及其索引生成新列
Generate new column based on values in another column and their index
在下面的 df 中,我想根据列 'A' 和 'X' 对列 'cdf_X' 的值进行排序。 'X'列和'cdf_X'列是相连的,因此如果'X'中的值出现在'A'列中,则'cdf_X'的值应该重新定位到该索引号新列中的列 'A'。 (值不会在列 'cdf_A' 中出现两次。)
示例:'X'=3 在索引 0 -> cdf_X=0.05 在索引 0 -> '3' 出现在索引 4 的 'A' 列中 -> cdf_A 在索引 4 = cdf_X 在索引 0
初始 df:
A X cdf_X
0 7 3 0.05
1 4 4 0.15
2 11 7 0.27
3 9 9 0.45
4 3 11 0.69
5 13 13 1.00
期望的 df:
A X cdf_X cdf_A
0 7 3 0.05 0.27
1 4 4 0.15 0.15
2 11 7 0.27 0.69
3 9 9 0.45 0.45
4 3 11 0.69 0.05
5 13 13 1.00 1.00
尝试过的代码:
import pandas as pd
df = pd.DataFrame({"A": [7,4,11,9,3,13],
"cdf_X": [0.05,0.15,0.27,0.45,0.69,1.00],
"X": [3,4,7,9,11,13]})
df.loc[:, 'cdf_A'] = df['cdf_X'].where(df['A'] == df['X'])
print(df)
我觉得你需要replace
df['cdf_A'] = df.A.replace(df.set_index('X').cdf)
Out[989]:
A X cdf cdf_A
0 7 3 0.05 0.27
1 4 4 0.15 0.15
2 11 7 0.27 0.69
3 9 9 0.45 0.45
4 3 11 0.69 0.05
5 13 13 1.00 1.00
检查map
df['cdf_A'] = df.A.map(df.set_index('X')['cdf'])
在下面的 df 中,我想根据列 'A' 和 'X' 对列 'cdf_X' 的值进行排序。 'X'列和'cdf_X'列是相连的,因此如果'X'中的值出现在'A'列中,则'cdf_X'的值应该重新定位到该索引号新列中的列 'A'。 (值不会在列 'cdf_A' 中出现两次。)
示例:'X'=3 在索引 0 -> cdf_X=0.05 在索引 0 -> '3' 出现在索引 4 的 'A' 列中 -> cdf_A 在索引 4 = cdf_X 在索引 0
初始 df:
A X cdf_X
0 7 3 0.05
1 4 4 0.15
2 11 7 0.27
3 9 9 0.45
4 3 11 0.69
5 13 13 1.00
期望的 df:
A X cdf_X cdf_A
0 7 3 0.05 0.27
1 4 4 0.15 0.15
2 11 7 0.27 0.69
3 9 9 0.45 0.45
4 3 11 0.69 0.05
5 13 13 1.00 1.00
尝试过的代码:
import pandas as pd
df = pd.DataFrame({"A": [7,4,11,9,3,13],
"cdf_X": [0.05,0.15,0.27,0.45,0.69,1.00],
"X": [3,4,7,9,11,13]})
df.loc[:, 'cdf_A'] = df['cdf_X'].where(df['A'] == df['X'])
print(df)
我觉得你需要replace
df['cdf_A'] = df.A.replace(df.set_index('X').cdf)
Out[989]:
A X cdf cdf_A
0 7 3 0.05 0.27
1 4 4 0.15 0.15
2 11 7 0.27 0.69
3 9 9 0.45 0.45
4 3 11 0.69 0.05
5 13 13 1.00 1.00
检查map
df['cdf_A'] = df.A.map(df.set_index('X')['cdf'])