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

2024-06-02 05:56:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建多个数据帧,这些数据帧是现有数据帧的子集。你知道吗

我有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遍吗???我希望我有更好的选择。你知道吗


Tags: 数据df列表forgetgrouplocation子集
3条回答

您将分配给循环变量,然后在下一次遍历时将其丢弃。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

除非你想要一个数据帧的列表,突然间你好像想要了。(我被df.append()抛出。对于listappend添加到原地结束。对于数据帧来说,它不是。在列表中,您需要:

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

这是一个有趣的方式来使用数据帧,但你去!:D个

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))

如果我理解正确,您可以使用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)

相关问题 更多 >