根据 pandas 数据框中的列值在循环中创建子集
Create subsets in a loop according to a column values in pandas dataframe
我有一个数据框,我不想根据一列的值在循环中创建子集。
这里有一个例子 df :
c1 c2 c3
A 1 2
A 2 2
B 0 2
B 1 1
我想像这样循环创建子集
第一次迭代,select C1=A 的所有行,仅列 2 和 3,第二次,C1=B 的所有行,仅 C2 和 3。
我试过以下代码:
for level in enumerate(df.loc[:,"C1"].unique()):
df_s = df.loc[df["C1"]==level].iloc[:, 1:len(df.columns)]
#other actions on the subsetted dataframe
但未执行子集。
如何遍历列的级别
例如在 R 中它将是
for (le in levels(df$C1){
dfs <- df[df$C1==le,2:ncol(df)]
}
谢谢
enumerate
不需要同时给出索引和值,直接遍历c1
列即可:
for level in df.c1.unique():
df_s = df.loc[df.c1 == level].drop('c1', 1)
print(level + ":\n", df_s)
#A:
# c2 c3
#0 1 2
#1 2 2
#B:
# c2 c3
#2 0 2
#3 1 1
很可能,您需要的是df.groupby('c1').apply(lambda g: ...)
,这应该是一种更有效的方法;这里 g
是具有唯一 c1
值的子数据框。
for level in df.loc[:,"c1"].unique():
print(level)
df_s = df.loc[df["c1"]==level,:].iloc[:,1:len(df)]
print(df_s)
A
c2 c3
0 1 2
1 2 2
B
c2 c3
2 0 2
3 1 1
或者(这个更像R)
for level in df.loc[:,"c1"].unique():
print(level)
df_s = df.loc[df["c1"]==level,df.columns[1:len(df)]]
print(df_s)
我有一个数据框,我不想根据一列的值在循环中创建子集。
这里有一个例子 df :
c1 c2 c3
A 1 2
A 2 2
B 0 2
B 1 1
我想像这样循环创建子集
第一次迭代,select C1=A 的所有行,仅列 2 和 3,第二次,C1=B 的所有行,仅 C2 和 3。
我试过以下代码:
for level in enumerate(df.loc[:,"C1"].unique()):
df_s = df.loc[df["C1"]==level].iloc[:, 1:len(df.columns)]
#other actions on the subsetted dataframe
但未执行子集。 如何遍历列的级别
例如在 R 中它将是
for (le in levels(df$C1){
dfs <- df[df$C1==le,2:ncol(df)]
}
谢谢
enumerate
不需要同时给出索引和值,直接遍历c1
列即可:
for level in df.c1.unique():
df_s = df.loc[df.c1 == level].drop('c1', 1)
print(level + ":\n", df_s)
#A:
# c2 c3
#0 1 2
#1 2 2
#B:
# c2 c3
#2 0 2
#3 1 1
很可能,您需要的是df.groupby('c1').apply(lambda g: ...)
,这应该是一种更有效的方法;这里 g
是具有唯一 c1
值的子数据框。
for level in df.loc[:,"c1"].unique():
print(level)
df_s = df.loc[df["c1"]==level,:].iloc[:,1:len(df)]
print(df_s)
A
c2 c3
0 1 2
1 2 2
B
c2 c3
2 0 2
3 1 1
或者(这个更像R)
for level in df.loc[:,"c1"].unique():
print(level)
df_s = df.loc[df["c1"]==level,df.columns[1:len(df)]]
print(df_s)