【问题标题】:how to create a function such that it create dataframes by iterating over a master dataframe如何创建一个函数,以便它通过迭代主数据帧来创建数据帧
【发布时间】:2019-12-27 11:26:41
【问题描述】:

我有一个熊猫数据框。我想为每个州创建单独的数据框,有些州是多次

我知道一种方法:

GOA_filter = df['STATE/UT']=='GOA'
GOA_df = df[GOA_filter]

这样我创建了 GOA 的数据框, 我不想为每个州手动执行此操作。 那么是否可以创建一个函数来创建名为“state_df”的数据帧??? 喜欢:GOA_df、HARYANA_df 等...

【问题讨论】:

  • 那么您提供的示例中的预期输出是什么?
  • @RiccardoBucco,预计应该为每个州创建数据帧。

标签: python pandas jupyter data-analysis


【解决方案1】:

这是一种方法,其想法是创建一个您可以调用的数据帧字典。

df = pd.DataFrame(
    {
        "State": ["GOA", "AP", "UP", "AB", "Punjab"],
        "vals": np.random.randint(0, 500, size=5),
    }
)
dfs = {}
for state, frame in df.groupby('State'):
   dfs[state] = frame


print(dfs['GOA'])
  State  vals
0   GOA   227

【讨论】:

  • 这是 IMO +1 的最佳方式
  • @anky_91 谢谢我从来没有真正发现需要在我自己的代码中执行此操作,但永远想不出它的用例。
  • 如果您想将数据帧保存在某个地方并提供参考,有时可能需要这样做
  • @anky_91 即使如此我认为它可以通过使用 pathlib 并自己调用 groupby 来简化,几个月前我不得不导出一个小 dB(我认为它是 50 gb)并使用pathlib 和 pandas 类似的东西,它不超过 15 行代码。
【解决方案2】:

试试这样的:

import pandas as pd
from io import StringIO

data = """
STATE/UT
A
A
B
C
C
D
"""

df = pd.read_csv(StringIO(data), sep=',')
for x, y in df.groupby('STATE/UT'):
    print('df')
    print(y)

结果:

df
  STATE/UT
0        A
1        A
df
  STATE/UT
2        B
df
  STATE/UT
3        C
4        C
df
  STATE/UT
5        D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-27
    • 2022-08-06
    • 2022-08-12
    • 1970-01-01
    • 2023-03-06
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多