要对 DataFrame 的列进行升序和降序排序并获取两个新 DataFrame,你可以使用 Pandas 的 `sort_values`...
现在的需求修正为
import pandas as pd
df = pd.read_excel('5.xlsx',header=None)
# 对于升序排序
df1 = df.sort_values(by=0, ascending=True).reset_index(drop=True)
# 对于降序排序
df2 = df.sort_values(by=0, ascending=False).reset_index(drop=True)
outls=[]
outls.append(df1的1--3,df2的1--3)
outls.append(df1的4--6,df2的4--6)
outls.append(df1的7--9,df2的7--9)
.......
.......
.......
总共追加42次 结束 wp231957 发表于 2024-11-15 14:58
现在的需求修正为
import pandas as pd
df = p ...
要实现这个功能,你可以创建一个新的列表 `outls`,然后按照需求从两个排序后的 DataFrame 中提取特定的行进行追加。以下是实现代码:
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('5.xlsx', header=None)
# 升序排序
df1 = df.sort_values(by=0, ascending=True).reset_index(drop=True)
# 降序排序
df2 = df.sort_values(by=0, ascending=False).reset_index(drop=True)
# 初始化一个空列表来存储结果
outls = []
# 按照需求从 df1 和 df2 中提取并组合数据,共 42 次
for i in range(42):
# 计算每次的起始索引
start_idx = i * 3
# 从 df1 和 df2 中提取1-3行、4-6行等
group = pd.concat(, df2.iloc])
# 将结果组合转为列表并加入到 outls
outls.append(group)
# 输出结果
for idx, group in enumerate(outls, start=1):
print(f"Group {idx}:\n{group}\n")
说明:
- 使用 `pd.concat` 来合并从 `df1` 和 `df2` 中提取的子 DataFrame。
- `iloc` 用于子集选取,确保每次提取三行。
- 通过循环进行多次合并,把结果加入 `outls`。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-11-15 14:58
要实现这个功能,你可以创建一个新的列表 `outls`,然后按照需求从两个排序后的 DataFrame 中提取特定 ...
如果我只想要数据呢 不想要组(group)
group = pd.concat(, df2.iloc])
# 将结果组合转为列表并加入到 outls
outls.append(group)
结果中 不想包含index 也不想包含字段名 wp231957 发表于 2024-11-15 15:05
如果我只想要数据呢 不想要组(group)
group = p ...
如果你只想要数据,而不需要索引或字段名,可以在将数据添加到 `outls` 前,将其转换为 NumPy 数组或直接提取值。这样会去掉 DataFrame 的索引和列名。下面是如何实现的:
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('5.xlsx', header=None)
# 升序排序
df1 = df.sort_values(by=0, ascending=True).reset_index(drop=True)
# 降序排序
df2 = df.sort_values(by=0, ascending=False).reset_index(drop=True)
# 初始化一个空列表来存储结果
outls = []
# 按照需求从 df1 和 df2 中提取并组合数据,共 42 次
for i in range(42):
# 计算每次的起始索引
start_idx = i * 3
# 从 df1 和 df2 中提取1-3行、4-6行等,并获取纯数据
group_data = pd.concat(, df2.iloc]).values
# 直接将 NumPy 数组添加到列表中
outls.append(group_data)
# 输出结果
for idx, group_data in enumerate(outls, start=1):
print(f"Data {idx}:\n{group_data}\n")
说明:
- `.iloc` 提取特定的行。
- `.values` 将 DataFrame 转换为 NumPy 数组,去除数据的索引和列名。
- 结果中的每个 `group_data` 是一个二维的 NumPy 数组,仅包含数据本身。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-11-15 15:05
如果你只想要数据,而不需要索引或字段名,可以在将数据添加到 `outls` 前,将其转换为 NumPy 数组或直 ...
dtype=object), array 这些东西 也不想要呢
只是单纯的数据 每6个数据构成一个元组 42个元组 构成一个列表即最终结果 wp231957 发表于 2024-11-15 15:10
dtype=object), array 这些东西 也不想要呢
只是 ...
好的,你希望每6个数据构成一个元组,然后这些元组构成一个列表。这样处理时,可以使用 `.tolist()` 方法将每个 NumPy 数组转换成纯 Python 数据。以下是实现代码:
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('5.xlsx', header=None)
# 升序排序
df1 = df.sort_values(by=0, ascending=True).reset_index(drop=True)
# 降序排序
df2 = df.sort_values(by=0, ascending=False).reset_index(drop=True)
# 初始化一个空列表来存储结果
outls = []
# 按照需求从 df1 和 df2 中提取并组合数据,共 42 次
for i in range(42):
# 计算每次的起始索引
start_idx = i * 3
# 从 df1 和 df2 中提取1-3行、4-6行等,并生成元组
group_tuple = tuple(df1.iloc.tolist() + df2.iloc.tolist())
# 添加元组到列表
outls.append(group_tuple)
# 输出结果
print(outls)
说明:
- `df1.iloc.tolist()` 提取 DataFrame 列中的前3行并将其转为列表。
- `+` 运算符用于合并两个列表。
- `tuple()` 将合并后的列表转换为元组。
- `outls` 是一个包含42个元组的列表,每个元组由6个数据组成。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-11-15 15:10
好的,你希望每6个数据构成一个元组,然后这些元组构成一个列表。这样处理时,可以使用 `.tolist()` 方 ...
>>> df
客户单号 客户发货时间 收货地址 总件数 重量(T) 体积
0 80037236992024-09-22 广东省佛山市高明区更合镇合塘路184号 80.0 2.000 4.00
1 80037237052024-09-23 朱村大道中491号 80.0 2.000 4.00
2 80037237102024-09-23 广东省惠州市博罗县麻陂镇大马路80号 80.0 0.100 4.00
3 80037237102024-09-23 广东省惠州市博罗县麻陂镇大马路80号 80.0 0.100 4.00
4 80037262752024-09-22 广东省广州市南沙区榄核镇大坳村工业B区200.0 5.00010.00
5 80037262792024-09-22 广东省佛山市高明区更合镇金腾路1号 80.0 2.000 4.00
6 80037277272024-09-26 广东省惠州市惠阳区大亚湾澳头荃湾综合港区400.010.00020.00
7 80037440092024-09-19 广东省广州市白云区鸦岗金沙围路11号 25.0 0.500 1.00
8 80037440102024-09-20 广东省东莞市麻涌镇麻涌镇新沙工业区海力饲料厂150.0 3.000 6.00
9 80037440102024-09-20 广东省东莞市麻涌镇麻涌镇新沙工业区海力饲料厂150.0 0.100 6.00
1080037462322024-09-23 广东省佛山市高明区荷城街道三洲兴盛路200.0 5.00010.00
1180037476132024-09-20 广东省佛山市高明区更合镇合塘路184号408.0 0.01020.40
1280037461132024-09-22 广东省广州市南沙区榄核镇大坳村工业B区400.010.00020.00
1380037476112024-09-20 广东省江门市开平市金鸡镇文乐街1号320.0 8.00016.00
1480037476122024-09-20 广东省佛山市高明区更合镇合塘路184号 32.0 0.800 1.60
1580037475902024-09-21 广东省云浮市新兴县车岗镇工业开发区100.0 2.000 4.00
1680037462332024-09-20 广东省广州市黄埔区横沙白街172号101房 50.0 1.000 2.00
1780037464322024-09-23广东省江门市蓬江区杜阮镇怡景大道振林饲料有限公司 江门 Guangdong160.0 4.000 8.00
1880037482352024-09-22 广东省云浮市新兴县东成镇十里工业区联营饲料厂800.020.00040.00
1980037482422024-09-22 广东省云浮市郁南县大湾镇小桥头工业区720.018.00036.00
2080037482402024-09-22 广东省云浮市新兴县车岗镇工业开发区200.0 5.00010.00
2180037482382024-09-22 广东省云浮市新兴县勒竹镇榄根400.010.00020.00
2280037482362024-09-22 广东省佛山市高明区更合镇高明温氏饲料厂Guangdong600.015.00030.00
2380037482372024-09-22 广东省云浮市新兴县稔村镇白土开发区360.0 9.00018.00
2480037482412024-09-22 广东省佛山市三水区南山镇六和镇城东路1号640.016.00032.00
已知以上数据,现在需求:
要求把收货地址中包含 东莞或者惠州或者佛山 的并且日期一致的记录合并重量字段求和 wp231957 发表于 2024-11-18 12:48
>>> df
客户单号 客户发货时间 ...
要将包含特定关键字的收货地址合并,并对同一天的重量进行求和,你可以使用 Pandas 的 `groupby` 和 `agg` 方法。首先,你需要筛选出地址中包含关键字 "东莞"、"惠州"、"佛山" 的记录,然后按照日期进行分组和求和。以下是示例代码:
import pandas as pd
# 假设已读取数据为 df
df = pd.read_excel('5.xlsx')
# 筛选出地址包含 "东莞"、"惠州" 或 "佛山" 的记录
keywords = ['东莞', '惠州', '佛山']
filtered_df = df.str.contains('|'.join(keywords))]
# 按客户发货时间分组,求重量的和
result_df = filtered_df.groupby('客户发货时间', as_index=False).agg({'重量(T)': 'sum'})
print(result_df)
说明:
- `str.contains('|'.join(keywords))`: 使用正则表达式将多个关键字用“或”条件连接,筛选包含这些关键字的记录。
- `groupby('客户发货时间')`: 根据日期进行分组。
- `.agg({'重量(T)': 'sum'})`: 对每个分组中的重量求和。
- `as_index=False`: 保证分组字段作为普通列返回,而不是索引。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-11-18 12:48
要将包含特定关键字的收货地址合并,并对同一天的重量进行求和,你可以使用 Pandas 的 `groupby` 和 `a ...
其他的数据也是需要的,正常按照日期分组 然后追加到这个结果当中 wp231957 发表于 2024-11-18 12:53
其他的数据也是需要的,正常按照日期分组 然后追加到 ...
如果需要保留其他数据,并按照日期分组,然后为一个含有特定地址的组合数据追加其他数据,可以通过 Pandas 的 `groupby` 和 `agg` 方法来进行处理。你可以对非聚合字段使用 `first`(或者其他需要的操作例如 `list` 等)来保持信息。以下是一个实现示例:
import pandas as pd
# 假设数据已读入并存在于 df 中
df = pd.read_excel('5.xlsx')
# 筛选出地址包含 "东莞"、"惠州" 或 "佛山" 的记录
keywords = ['东莞', '惠州', '佛山']
filtered_df = df.str.contains('|'.join(keywords))]
# 基于日期合并信息
result_df = filtered_df.groupby('客户发货时间', as_index=False).agg({
'客户单号': 'first', # 如果同一天有多个,可以用 'list' 来保留所有值
'收货地址': 'first', # 类似地,'list' 可以保留所有地址
'总件数': 'sum',
'重量(T)': 'sum',
'体积': 'sum'
})
# 若原始数据中没有过滤掉的,也按照日期汇总,可以通过 append 的方法追加上
other_records = df[~df['收货地址'].str.contains('|'.join(keywords))]
other_grouped = other_records.groupby('客户发货时间', as_index=False).agg({
'客户单号': 'first',
'收货地址': 'first',
'总件数': 'sum',
'重量(T)': 'sum',
'体积': 'sum'
})
# 把两个结果合并起来
final_result = pd.concat(, ignore_index=True)
print(final_result)
说明:
- `groupby` 用于按日期分组。
- 对于希望保持在最终结果中的其他信息(比如客户单号、收货地址等),可以选择在 `agg` 方法中使用 `'first'`,而对于需要合计的数值列使用 `'sum'`。
- `pd.concat` 方法将包含特定地址的组合数据和其他数据合在一起,形成最终的结果。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-11-18 12:55
如果需要保留其他数据,并按照日期分组,然后为一个含有特定地址的组合数据追加其他数据,可以通过 Pan ...
现在有这样一组数据
ADAKLDJ
DKJLAKSDJKA
SDJKLSAJKLAJD
SDJKLSDJDKLSA
DKLSDAJF;SASDL
AJDKL;DSAJKLAJ
DJFKLAJDFKLSA
FDSJKLFJSADLKDJFA
SDJFKLSDAJFKLSA
DJFKLSDADFJKLASDF
AJDKFJSADKFA
SDJFKSAJDFKLAS
DFJKSLAJDFKLA
DFSKALJSDFKLDFJPDFO
;SDJFJALSDKJF
ADJIIPQEURFLIAJSD'FJSADKL
QDFJALKJDFKL'Q
WEJKF
要求使用pandas 对每一行进行单独排序 wp231957 发表于 2024-11-19 14:05
现在有这样一组数据
ADAKLDJ
DKJLAKSDJKA
SDJKLSAJ ...
可以使用 Pandas 的 `apply` 方法对 DataFrame 的每一行(或者特定列)进行操作。在您的场景中,需要对每一行的数据进行字符排序。以下是实现的方法:
import pandas as pd
# 假设数据已经以列表形式存在
data = [
"ADAKLDJ",
"DKJLAKSDJKA",
"SDJKLSAJKLAJD",
"SDJKLSDJDKLSA",
"DKLSDAJF;SASDL",
"AJDKL;DSAJKLAJ",
"DJFKLAJDFKLSA",
"FDSJKLFJSADLKDJFA",
"SDJFKLSDAJFKLSA",
"DJFKLSDADFJKLASDF",
"AJDKFJSADKFA",
"SDJFKSAJDFKLAS",
"DFJKSLAJDFKLA",
"DFSKALJSDFKLDFJPDFO",
";SDJFJALSDKJF",
"ADJIIPQEURFLIAJSD'FJSADKL",
"QDFJALKJDFKL'Q",
"WEJKF"
]
# 创建 DataFrame
df = pd.DataFrame(data, columns=['Text'])
# 对每一行的每个字符串进行排序
df['Sorted_Text'] = df['Text'].apply(lambda x: ''.join(sorted(x)))
# 输出结果
print(df['Sorted_Text'])
说明:
1. 使用 `pd.DataFrame` 将数据转化为 DataFrame。
2. 使用 `apply` 方法对列中的每个字符串应用 `sorted` 函数,然后用 `''.join()` 将排序后的字符重新组合成字符串。
3. 结果存储在新的列 `Sorted_Text` 中。
这样,每一行的字符都会被单独排序并保存。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
1
[2]