我有一个如下数据框:
function changeText(){
document.getElementById("p1").innerHTML = "slm"
}
我期望的数据框:
Card_x Country Age Code Card_y Diff
S INDIA Adult Garments S 9.2
S INDIA Adult Grocery S 21.33
S INDIA Adult Garments M 151.4
S INDIA Adult Grocery M 202.15
S INDIA Adult Grocery G 48.7
S INDIA Adult Garments G 126.82
S INDIA Adult Garments E 19.17
S INDIA Adult Grocery E 276.09
S INDIA Adult Grocery D 3.05
S INDIA Adult Garments D 69.43
S INDIA Adult Grocery A 109.47
S INDIA Adult Garments A 161.75
说明: 我想基于每个“代码”的“差异”中的值来获得“卡片_y”中的排名卡
例如
我尝试了以下代码:
Card_x Country Age Code Card_y
S INDIA Adult Garments S,E,D,G,M,A
S INDIA Adult Grocery D,S,G,A,M,E
但是我没有得到预期的结果。
答案 0 :(得分:3)
尝试:
df.sort_values('Diff').groupby(['Card_x','Country','Age','Code'])['Card_y']\
.agg(list).reset_index()
输出:
Card_x Country Age Code Card_y
0 S INDIA Adult Garments [S, E, D, G, M, A]
1 S INDIA Adult Grocery [D, S, G, A, M, E]
不在列表中,然后使用
df.sort_values('Diff').groupby(['Card_x','Country','Age','Code'])['Card_y']\
.agg(','.join).reset_index()
输出:
Card_x Country Age Code Card_y
0 S INDIA Adult Garments S,E,D,G,M,A
1 S INDIA Adult Grocery D,S,G,A,M,E
答案 1 :(得分:1)
将sort_values
与groupby
和join
一起使用:
df = df.sort_values(['Card_x','Country', 'Age', 'Code', 'Diff'])
df1 = (df.groupby(['Card_x','Country', 'Age', 'Code'])['Card_y']
.apply(','.join)
.reset_index())
print (df1)
Card_x Country Age Code Card_y
0 S INDIA Adult Garments S,E,D,G,M,A
1 S INDIA Adult Grocery D,S,G,A,M,E
答案 2 :(得分:0)
我将首先对您的DataFrame进行排序,然后对GroupBy Card_y进行排序,然后获得一个列表。这应该可以解决问题。
df.sort_values("Diff").groupby(["Card_x", "Country","Age","Code"])["Card_y"].apply(list).reset_index()