如何解决通过熊猫中现有数据框的分组简单组合创建df
我正在尝试建立一对df
跨行的熊猫。我将以更好的方式进行解释:
在我的df
中,有几组,每行有两个值,因此df
的构建方式如下:
Group Car Value
A x 0.1
A y 0.5
A z 0.12
B x 1.1
B w 1.26
B y 0.7
我要尝试的方法是建立一个新的df
,其中对于一个组中的所有可能组合,属于同一组的每辆车都在同一组中的另一辆车的同一行中一种简单组合)。
注意:汽车在不同的组中具有不同的值。
我想要的df
是:
Car1 Car2 Value1 Value2
x y 0.1 0.5
x z 0.1 0.12
y z 0.5 0.12
x w 1.1 1.26
x y 1.1 0.7
w y 1.26 0.7
我尝试使用类似的东西:
pd.DataFrame([[np.hstack([g.car[prev],g.car[cur],g.value[prev],g.value[cur]])
for _,g in df.groupby(['group'])]
for prev,cur in zip(g.index,g.index[1:])],columns=['car1','car2','value1','value2']
)
但这不能解决我的问题。
如果我的问题不清楚,请问我。
解决方法
让我们groupby
df
列上的Group
,然后为每个分组的帧映射到函数f
,该函数计算长度为{{的所有combinations
} 1}}组中的汽车:
2
from itertools import combinations
def f(g):
for c in combinations(g.index,r=2):
yield np.hstack(g.loc[c,['Car','Value']].T.values)
a = np.vstack([*f(g)] for _,g in df.groupby('Group'))
d = pd.DataFrame(a,columns=['Car1','Car2','Value1','Value2'])
,
您使用自联接并过滤结果:
@Override
public String toString() {
return this.getName();
}
输出:
dfn=df.assign(row=df.groupby('Group').cumcount())
dfn.merge(dfn,on=['Group'],suffixes=('1','2')).query('row1 < row2').drop(['row1','row2'],axis=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。