我有一个groupby对象:
<field name="myProjectList"
type="sql"
default="10"
label="Select an article"
query="SELECT id, title FROM #__projectinfo"
key_field="id" // Use your respected key_field column
value_field="title" //Use your respected value_field column
/>
如何将groupby对象排序为以下内容:
col1 col2 x y z
0 A D1 0.269002 0.131740 0.401020
1 B D1 0.201159 0.072912 0.775171
2 D D1 0.745292 0.725807 0.106000
3 F D1 0.270844 0.214708 0.935534
4 C D1 0.997799 0.503333 0.250536
5 E D1 0.851880 0.921189 0.085515
然后计算行A {x,y,z}和行B {x,y,z},行B {x,y,z}和行C {x,y,z}之间的均值。这样我有:
col1 col2 x y z
0 A D1 0.269002 0.131740 0.401020
1 B D1 0.201159 0.072912 0.775171
4 C D1 0.997799 0.503333 0.250536
2 D D1 0.745292 0.725807 0.106000
5 E D1 0.851880 0.921189 0.085515
3 F D1 0.270844 0.214708 0.935534
我基本上试图在计算上找到六边形结构顶点之间的中点(好吧......更像是1000万)。提示赞赏!
答案 0 :(得分:0)
我认为您需要groupby
使用rolling
并汇总mean
,最后一对使用shift
并删除每个组的第一个NaN
行:
print (df)
col1 col2 x y z
0 A D1 0.269002 0.131740 0.401020
1 B D1 0.201159 0.072912 0.775171
2 D D1 0.745292 0.725807 0.106000
3 F D2 0.270844 0.214708 0.935534 <-change D1 to D2
4 C D2 0.997799 0.503333 0.250536 <-change D1 to D2
5 E D2 0.851880 0.921189 0.085515 <-change D1 to D2
#
df = (df.sort_values(['col1','col2'])
.set_index('col1')
.groupby('col2')['x','y','z']
.rolling(2)
.mean()
.reset_index())
df['col1'] = df.groupby('col2')['col1'].shift() + '-' + df['col1']
df = df.dropna(subset=['col1','x','y','z'], how='all')
#alternative
#df = df[df['col2'].duplicated()]
print (df)
col2 col1 x y z
1 D1 A-B 0.235081 0.102326 0.588095
2 D1 B-D 0.473226 0.399359 0.440586
4 D2 C-E 0.924840 0.712261 0.168026
5 D2 E-F 0.561362 0.567948 0.510524