基于python中另一个数据帧的列值拆分数据帧

2024-09-22 10:20:44 发布

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

我有以下数据帧:

Date    Country Type    Consumption
01/01/2019     Fr   IE  186
02/01/2019     Fr   IE  131
01/01/2019      Fr  SE  115
02/01/2019     Fr   SE  141
03/01/2019     Fr   SE  158
01/01/2019     Po   DK  208
01/01/2019     Po   IE  150
02/01/2019     Po   IE  136
01/01/2019    Po    SE  210
02/01/2019     Po   SE  195
03/01/2019     Po   SE  160
01/01/2019     Hk   DK  229
01/01/2019     Hk   IE  159
02/01/2019     Hk   IE  210
01/01/2019     Hk   SE  130
02/01/2019     Hk   SE  179
03/01/2019     Hk   SE  143

我想按国家/地区和类型将其拆分为多个数据帧。例如,我想

数据框1:

enter image description here

数据框2:

enter image description here

数据框3:

enter image description here

数据框4:

enter image description here

以此类推(&S)。。。你知道吗

我创建了另一个数据帧

df = pd.DataFrame({
"Country": ["Fr", "Po"],
"Type": ["IE", "SE"]})

因为我只想基于“df”中的这些值创建新的数据帧

使用以下代码:

#create unique list of names

 UniqueNames = pd.unique(df[['Country','Type']].values.ravel())
 DataFrameDict = {elem : pd.DataFrame for elem in UniqueNames}

 for key in DataFrameDict.keys():
     DataFrameDict[key] = df3[:][df3.Country == key]

但这并不能达到目的&我得到的是所有类型值的数据帧。你知道吗

如何做到这一点?你知道吗

我还尝试了以下代码:

d = {}
for name, group in df3.groupby(['City','Type']):
    d['group_' + str(name)] = group

但问题是,它为城市类型的每个独特组合创建数据帧,而我只需要几个组合。你知道吗

数据帧的名称如下 d[“组\('Fr','IE')”] d[“组\('Fr','SE')”]

我能把这些名字改成更简单的名字吗 弗鲁伊 使用 因为我需要在每个数据帧上运行许多其他函数


Tags: 数据keyin类型dffortypefr
2条回答

鉴于我正确地理解了这个问题,如果您只是像下面那样定义关键数据帧df:

df = pd.DataFrame({
"Country": ["Fr", "Po"],
"Type": ["IE", "SE"]})

您缺少其他组合,如:['Fr'、'SE']和['Po'、'IE']。你知道吗

我把问题解决如下。希望这有助于:

import pandas as pd

# I put your original data in a file called data.txt
# and read it into a dataframe called df_data
df_data = pd.read_csv('data.txt', sep=',')
print(df_data)

# Creating a dataframe of all selected country and type pairs
df_temp = df_data.groupby(['Country', 'Type']).size().reset_index(name='Count')
df = df_temp[df_temp['Country'].isin(['Fr', 'Po']) & df_temp['Type'].isin(['IE', 'SE'])].drop('Count', axis=1)
print(df)

# Then loop through the tuples
tuples = [tuple(x) for x in df.values]
my_dfs = [df_data[(df_data['Country'] == mytuple[0]) & (df_data['Type'] == mytuple[1])] for mytuple in tuples]

for my_df in my_dfs:
    print(my_df)

将具有所需值的数据帧转换为元组列表,以便能够循环和过滤它

tuples = [tuple(x) for x in df.values]

最后,用列表中的每一项过滤原始数据帧,在这里我打印每一项,但您可能想做其他事情。。。你知道吗

for mytuple in tuples:
    print(original_df[(original_df['Country'] == mytuple[0]) & (original_df['Type'] == mytuple[1])])

要将每个数据帧保存在新变量中,可以使用列表:

my_dfs = [df[(df['Country'] == mytuple[0]) & (df['Type'] == mytuple[1])] for mytuple in tuples]
for my_df in my_dfs:
    print(my_df)

相关问题 更多 >