同时按两个不同选项分组

时间:2019-01-22 10:18:44

标签: python pandas

早上好。

我的熊猫数据框如下:

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:targetApi="o"
tools:context="in.sarabdroid.dailylatestsongs.MainActivity">

<LinearLayout
    android:id="@+id/one"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:gravity="center">


    <ImageView
        android:id="@+id/imagepunjabisingletrack"
        android:layout_width="170dp"
        android:layout_height="170dp"
        android:layout_marginHorizontal="10dp"
        android:background="@drawable/punjabisingletracks"
        android:contentDescription="@string/imgcontent" />

    <ImageView
        android:id="@+id/imagepunjabitop20weekly"
        android:layout_width="170dp"
        android:layout_height="170dp"
        android:layout_marginHorizontal="10dp"
        android:background="@drawable/punjabitoptwenty"
        android:contentDescription="@string/imgcontent" />

  </LinearLayout>

  <LinearLayout
    android:id="@+id/two"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_below="@+id/one">

    <ImageView
        android:id="@+id/imagehindisingletracks"
        android:layout_width="170dp"
        android:layout_height="170dp"
        android:layout_marginHorizontal="10dp"
        android:background="@drawable/hindisingletracks"
        android:contentDescription="@string/imgcontent" />

    <ImageView
        android:id="@+id/imagehinditop20weekly"
        android:layout_width="170dp"
        android:layout_height="170dp"
        android:layout_marginHorizontal="10dp"
        android:background="@drawable/hinditoptwenty"
        android:contentDescription="@string/imgcontent" />
  </LinearLayout>
  <!--LinearLayout
    android:id="@+id/three"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_below="@+id/two">

    <ImageView
        android:id="@+id/imagewhatsappvidwo"
        android:layout_width="170dp"
        android:layout_height="170dp"
        android:layout_marginHorizontal="10dp"
        android:background="@drawable/punjabitop20weekly"
        android:contentDescription="@string/imgcontent" />

    <ImageView
        android:id="@+id/imagevideos"
        android:layout_width="170dp"
        android:layout_height="170dp"
        android:layout_marginHorizontal="10dp"
        android:background="@drawable/punjabitop20weekly"
        android:contentDescription="@string/imgcontent" />
</LinearLayout>-->

 </RelativeLayout>

我想对c和a列进行分组,但是使用SQL的COUNT(DISTINCT)之类将c分组,并使用sum()进行分组,结果是:

 public class Category extends Fragment {
//CustomAndroidGridViewAdapter adapter;
// GridView gv;
ImageView imgone, imgtwo, imgthree, imgfour;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.category, container, 
 false);
    imgone = 
 (ImageView)rootView.findViewById(R.id.imagepunjabisingletrack);
    imgtwo = 
 (ImageView)rootView.findViewById(R.id.imagepunjabitop20weekly);
    imgthree = 
 (ImageView)rootView.findViewById(R.id.imagehindisingletracks);
    imgfour = 
 (ImageView)rootView.findViewById(R.id.imagehinditop20weekly);

    imgone.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ((MainActivity)getActivity()).setCurrentItem (1, true);
        }
    });
    imgtwo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ((MainActivity)getActivity()).setCurrentItem (2, true);
        }
    });
    imgthree.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent =  new Intent(getActivity(), 
 HindiSingleTracks.class);
            getActivity().startActivity(intent);
        }
    });
    imgfour.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent =  new Intent(getActivity(), 
 HindiTop20Weekly.class);
            getActivity().startActivity(intent);
        }
    });

    return rootView;

但是尝试groupby和stack的不同组合时,我无法达到该结果。

编辑 考虑到“ c”列存储的是ID号,因此升序仅是示例,因此max合计将不起作用。抱歉,不要再说了。

我认为可能的解决方案是将其分为两个不同的数据帧,进行分组,然后合并,但是我不确定这是否是最佳解决方案。

非常感谢您。

1 个答案:

答案 0 :(得分:1)

您需要先聚合const removeElement = (state, elementId) => { const newState = dissoc('b', state) return pipe( filter((currentDoc) => currentDoc.position > state[elementId].position), clone, forEachObjIndexed((value, key) => (value.position-=1), __), merge(newState) )(newState) } removeElement(state, 'b') list,然后调用DataFrame.cumsum

sum

最后得到每个列表的唯一值的长度:

df = df.groupby('f').agg({'c':list, 'a':'sum'}).cumsum()
print (df)
                                                   c        a
f                                                            
2                           [154, 215, 1, 8000, 214]   288.32
3                      [154, 215, 1, 8000, 214, 640]   576.32
4      [154, 215, 1, 8000, 214, 640, 780, 830, 8000]   873.32
5  [154, 215, 1, 8000, 214, 640, 780, 830, 8000, ...  1569.52

编辑:

df['c'] = df['c'].apply(lambda x: len(set(x)))
df = df.reset_index()

print (df)
   f   c        a
0  2   5   288.32
1  3   6   576.32
2  4   8   873.32
3  5  10  1569.52