如何在python中使用for循环创建多个数据帧

时间:2019-05-29 02:37:39

标签: python pandas loops dataframe

我正在尝试制作多个数据帧,这些数据帧是现有数据帧的子集。

我有df_list,它实际上是数据集列表:

df_list = [df1B, df2B, df3B, df4B, df5B, df6B, df7B, df8B, df9B, df10B, df11B, df12B, df13B, df14B, df15B, df16B, df17B, df18B, df19B, df20B, df21B, df22B, df23B, df24B, df25B, df26B, df27B, df28B, df30B, df31B, df32B, df33B, df34B, df35B]

如果我想制作单个数据集的子集,则可以这样做,并且可以:

df2B = df2B.groupby(['Location']).get_group(36)

它会占用所有编号为36的位置,但是当我尝试对for循环中的所有数据集执行此操作时

for df in df_list:
    df = df.groupby(['Location']).get_group(36)

但这并不是每个数据集都能做到的。它没有显示任何错误消息,但也没有执行其他任何操作:(

我应该在同一行写35次吗???我希望我有一个更好的选择。

3 个答案:

答案 0 :(得分:1)

如果我的理解正确,您可以为此使用list理解:

subset_df_list = [df.groupby('Location').get_group(36) for df in df_list]

顺便说一句,您的for循环不起作用,因为您只是不断分配回df。您可能需要这样做,这也等同于上述理解:

subset_df_list = []

for df in df_list:
    subset_df = df.groupby('Location').get_group(36)
    subset_df_list.append(subset_df)

答案 1 :(得分:0)

df = [pd.DataFrame({'Location': np.random.randint(0,5,size=(100))}) for i in range(10)]
df = list(map(lambda x: x.groupby('Location').get_group(1), df))

答案 2 :(得分:0)

您要分配给循环变量,然后将其丢弃。 DataFrame.append不是inplace,并且没有inplace参数。相反:

df1 = pd.DataFrame({'gr': [1,1,2,2], 'v': [1,2,3,2]})
df2 = pd.DataFrame({'gr': [1,1,2,2], 'v': [6,5,4,3]})
df_combined = pd.DataFrame({'gr': [], 'v':[]})
df_combined
Empty DataFrame
Columns: [gr, v]
Index: []
for df in [df1, df2]:
    df_combined = df_combined.append(df.groupby('gr').get_group(1))
df_combined
#     gr    v
# 0  1.0  1.0
# 1  1.0  2.0
# 0  1.0  6.0
# 1  1.0  5.0

除非您想要一个DataFrames列表,否则突然看起来就像您一样。 (我被df.append()抛出了。对于listappend会添加到末尾。对于DataFrame,它不会添加。在列表的情况下,您需要:

# setup as before
combined_dfs = []
for df in [df1, df2]:
    combined_dfs = df_combined.append(df.groupby('gr').get_group(1))

这是使用DataFrames的一种有趣方式,但是可以! :D