import pandas as pd
df = pd.DataFrame({'A':[3,5,3,4,2,3,2,3,4,3,2,2,2,3],
'B':[10,20,30,40,20,30,40,10,20,30,15,60,20,15]})
A B
0 3 10
1 5 20
2 3 30
3 4 40
4 2 20
5 3 30
6 2 40
7 3 10
8 4 20
9 3 30
10 2 15
11 2 60
12 2 20
13 3 15
我想添加一个C
列,其中滚动平均值为B
(滚动周期= A
)。
例如,C
的{{1}}值应为row index(2)
,而df.B.rolling(3).mean() = mean(10,20,30)
的{{1}}值应为C
。< / p>
答案 0 :(得分:2)
可能很愚蠢...但是这就完成了
public class MainActivity extends AppCompatActivity {
TextView txt_title;
Button btn_send;
EditText edt_notification;
public final static String NOTIFICATION_DATA="NOTIFICATION_DATA";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt_title= (TextView) findViewById(R.id.txt_title);
edt_notification= (EditText) findViewById(R.id.edt_notification);
btn_send= (Button) findViewById(R.id.btn_send);
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SendNotification(Calendar.getInstance().getTimeInMillis(), edt_notification.getText().toString());
}
});
}
private void SendNotification(long timeInMillis, String s) {
Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="ir.wikichera.badamchi.sendnotification.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txt_title"
android:text="Notification Text:"
android:textSize="18sp"
android:textStyle="normal|bold" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:layout_below="@+id/txt_title"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="10dp"
android:id="@+id/edt_notification"
android:hint="put your text here"
android:singleLine="false" />
<Button
android:text="Send"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/edt_notification"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="17dp"
android:id="@+id/btn_send" />
</RelativeLayout>
<强> 解释 强>
def crazy_apply(row):
p = df.index.get_loc(row.name)
a = row.A
return df.B.iloc[p-a+1:p+1].mean()
df.apply(crazy_apply, 1)
0 NaN
1 NaN
2 20.000000
3 25.000000
4 30.000000
5 30.000000
6 35.000000
7 26.666667
8 25.000000
9 20.000000
10 22.500000
11 37.500000
12 40.000000
13 31.666667
dtype: float64
遍历每列或每行。我们遍历每一行,因为我们使用了参数apply
(请参阅axis=1
作为1
调用中的第二个参数)。因此apply
的每次迭代都会传递一个代表当前行的pandas系列对象。当前索引值位于行的apply
属性中。行对象的索引与name
的列相同。
因此,df
找到df.index.get_loc(row.name)
中保存的当前索引值的序号位置。 row.name
是该行的row.A
列。